cl ppcre - lisp-cookbook-ja/common-lisp GitHub Wiki
CLiki:CL-PPCREใงใฏๆญฃ่ฆ่กจ็พใๆๅญๅใSๅผใง่กจ็พใใพใใๆๅญๅใงๆญฃ่ฆ่กจ็พใ่กจ็พใใๅ ดๅใฏใๆๅญใฏใฉในใไฝฟใใจใใชใฉใPerlใชใฉใงไฝฟใใใ่กจ่จใใจในใฑใผใใใชใใใฐใชใใชใใใจใใใใพใใ
Quicklispใใๅ ฅใใใใจใใงใใพใใ
(ql:quickload :cl-ppcre)
ๅบๆฌ็ใซPerlใฎๆญฃ่ฆ่กจ็พใๆๅญๅใงๆธกใใฐๅ้กใใใพใใใใใ ใใไธใซใใใใพใใใๆๅญๅใงๆญฃ่ฆ่กจ็พใ่กจใๅ ดๅใ่กจ่จใใจในใฑใผใใใชใใใฐใชใใชใใใจใใใใพใใ
;; bใซใใใใใ
(ppcre:scan "b" "abc")
(ppcre:scan #\b "abc")
;=> 1
; 2
; #()
; #()
;; ไปปๆใฎๆๅญใซใใใใใ
(ppcre:scan "." "abc")
(ppcre:scan :everything "abc")
;=> 0
; 1
; #()
; #()
;; ไปปๆใฎ3ๆๅญใซใใใใใ
(ppcre:scan "..." "abc")
(ppcre:scan '(:sequence :everything :everything :everything) "abc")
;=> 0
; 3
; #()
; #()
;; Perlใฎๆๅญใฏใฉใน\wใซใใใใใ
;; "\w"ใฏ"w"ใจๅใๆๅณใซใชใฃใฆใใพใใใใ"\\w"ใจใใชใใใฐใชใใชใ
(ppcre:scan "\\w" "abc")
(ppcre:scan :word-char-class "abc")
;=> 0
; 1
; #()
; #()
;; aใจbใจcใฎใใใใใซใใใใใ
(ppcre:scan "[abc]" "a")
(ppcre:scan '(:char-class #\a #\b #\c) "a")
;=> 0
; 1
; #()
; #()
(ppcre:scan "[abc]" "c")
(ppcre:scan '(:char-class #\a #\b #\c) "c")
;=> 0
; 1
; #()
; #()
;; aใจbใจcไปฅๅคใซใใใใใ
(ppcre:scan "[^abc]" "c")
(ppcre:scan '(:inverted-char-class #\a #\b #\c) "c")
;=> NIL
(ppcre:scan "[^abc]" "d")
(ppcre:scan '(:inverted-char-class #\a #\b #\c) "d")
;=> 0
; 1
; #()
; #()
;; ่กใฎๆๅใฎaใซใใใใใ
(ppcre:scan "^a" "abc")
(ppcre:scan '(:sequence :start-anchor #\a) "abc")
;=> 0
; 1
; #()
; #()
(ppcre:scan "^a" "cba")
(ppcre:scan '(:sequence :start-anchor #\a) "cba")
;=> NIL
;; ่กใฎๆๅพใฎcใซใใใใใ
(ppcre:scan "c$" "abc")
(ppcre:scan '(:sequence #\c :end-anchor) "abc")
;=> 2
; 3
; #()
; #()
(ppcre:scan "c$" "aaa")
(ppcre:scan '(:sequence #\c :end-anchor) "aaa")
;=> NIL
;; 0ๆๅญไปฅไธใฎๆฐๅญใซใใใใใ
(ppcre:scan "\\d*" "01234")
(ppcre:scan '(:greedy-repetition 0 nil :digit-class) "01234")
;=> 0
; 5
; #()
; #()
;; 1ๆๅญไปฅไธใฎๆฐๅญใซใใใใใ
(ppcre:scan "\\d+" "01234")
(ppcre:scan '(:greedy-repetition 1 nil :digit-class) "01234")
;=> 0
; 5
; #()
; #()
(ppcre:scan "\\d+" "abc012")
(ppcre:scan '(:greedy-repetition 1 nil :digit-class) "abc012")
;=> 3
; 6
; #()
; #()
ๆๅญๅใง่กจใใๆญฃ่ฆ่กจ็พใงใกใฟๆๅญ่ชไฝใธใใใใใใใๅ ดๅใใกใฟๆๅญใใจในใฑใผใใใฆใใฟใผใณใซๆๅฎใใชใใใฐใชใใพใใใ
;; ใ^ใใซใใใใใ
(ppcre:scan "\\^" "^")
(ppcre:scan #\^ "^")
;=> 0
; 1
; #()
; #()
;; ใ^ใใงใใใใกใชใใน๏ผ่กใฎๅ
้ ญใซใใใ๏ผ
(ppcre:scan "^" "^")
;=> 0
; 0
; #()
; #()
;; ๅฟ็จไพ๏ผๆๆฐใๅใๅบใ
(ppcre:register-groups-bind (e)
("\\^([0-9]+)=" "2^10=1024")
e)
(ppcre:register-groups-bind (e)
('(:sequence
#\^
(:register (:greedy-repetition 1 nil (:char-class (:range #\0 #\9))))
#\=)
"2^10=1024")
e)
;=> "10"
;; ใ(ใใใ)ใใซใใใใใ
(ppcre:scan "\\(" "(")
(ppcre:scan #\( "(")
(ppcre:scan "\\)" ")")
(ppcre:scan #\) ")")
;=> 0
; 1
; #()
; #()
;; ใ(ใใใ)ใใงใใใใกใชใใน๏ผๆญฃ่ฆ่กจ็พใฎๆงๆใจใฉใผ๏ผ
(ppcre:scan "(" "(")
(ppcre:scan ")" ")")
;>> Error: Expected end of string.
;; ๅฟ็จไพ๏ผๆฌๅผงๅ
ใฎๆๅญใๅใๅบใ
(ppcre:register-groups-bind (n)
("\\(([0-9]+)\\)$" "math(85)")
n)
(ppcre:register-groups-bind (n)
('(:sequence
#\(
(:register (:greedy-repetition 1 nil (:char-class (:range #\0 #\9))))
#\)
:end-anchor)
"math(85)")
n)
;=> "85"
;; ใใใใใไฝ็ฝฎใ่ฟใ
(ppcre:scan "[c-e]+" "abcdefg")
;=> 2
; 5
; #()
; #()
;; ไธ็ช็ฎใจๅ็ช็ฎใฎๆปใๅคใฏใฐใซใผใๅใใใใใฟใผใณใใใใใใไฝ็ฝฎ
(ppcre:scan "((a)(b)(c))" "abc")
;=> 0
; 3
; #(0 0 1 2)
; #(3 1 2 3)
;; ใใใใใ้จๅใใชใใจใใฏNILใ่ฟใ
(ppcre:scan "a" "b")
;=> NIL
;; ใใใใใ้จๅๆๅญๅใ่ฟใ
(ppcre:scan-to-strings "\\d+" "Originally specified in 1958, Lisp is")
;=> "1958"
; #()
;; ใใฟใผใณใซใใใใใๅ
จใฆใฎ้จๅๆๅญๅใใชในใใง่ฟใ
(ppcre:all-matches-as-strings "\\w+" "foo bar baz")
;=> ("foo" "bar" "baz")
ใใฟใผใณใซใใใใใๆๅญๅใๅคๆฐใซๆ็ธใใพใใ
;; ใฐใซใผใๅใใใใใฟใผใณใใใใใใ้จๅใฎๆๅญๅใ้ ็ชใซๆ็ธใใ
(ppcre:register-groups-bind (base _ exp)
("(\\d+)(\\^(\\d+))?" "10^1000")
(declare (ignore _))
(values (read-from-string base)
(read-from-string exp)))
;=> 10
; 1000
;; ใฐใซใผใๅใใใใใฟใผใณใใชใใจใจใฉใผ
(ppcre:register-groups-bind (match)
("a" "abc")
match)
;>> Error: Array index 0 out of bounds for #() .
ใใฟใผใณใซใใใใใ้จๅใ่ฆไปใใใใจใซๅฆ็ใ็นฐใ่ฟใใพใใ
;; ใใใใใ้จๅใฎไฝ็ฝฎใๆธกใใใ
(let ((target "1 20 300 4000 50000"))
(ppcre:do-matches (start end "\\d+" target)
(format t "~A~%" (subseq target start end))))
;-> 1
; 20
; 300
; 4000
; 50000
;=> NIL
;; ใใใใใ้จๅใฎๆๅญๅใๆธกใใใ
(ppcre:do-matches-as-strings (match "\\d+" "1 20 300 4000 50000")
(format t "~A~%" match))
;-> 1
; 20
; 300
; 4000
; 50000
;=> NIL
;; ็ฝฎๆๅพใฎๆๅญๅใจใใใใใใใฉใใใ่ฟใ
(ppcre:regex-replace "<" "<<<" "<")
;=> "<<<"
; T
;; ใใใใใชใใใฐไบ็ช็ฎใฎๆปใๅคใฏNIL
(ppcre:regex-replace ">" "<<<" "<")
;=> "<<<"
; NIL
;; ใใใใใใใฟใผใณใในใฆใ็ฝฎใๆใใ
(ppcre:regex-replace-all "<" "<<<" "<")
;=> "<<<"
; T
;; ๅฟ็จไพ๏ผๆน่กใ็ฉบ็ฝใซ็ฝฎๆใใ
(ppcre:regex-replace-all "\\n" "a
b
c" " ")
(ppcre:regex-replace-all #\newline "a
b
c" " ")
;=> "a b c"
; T
;; ๅๅฒใใฆใชในใใง่ฟใ
(ppcre:split "," "a,b,c")
;=> ("a" "b" "c")
;; ใใใใใใใฟใผใณใๆๅญๅใฎๆๅพใซใใใจใใฏ็ก่ฆใใใ
(ppcre:split "," "a,b,c,")
;=> ("a" "b" "c")
;; ใใใใใชใใจใใฏใใฎใพใพใฎๆๅญๅใใชในใใซใใฆ่ฟใ
(ppcre:split "," "abc")
;=> ("abc")