标签: cl-ppcre

使用cl-ppcre的正则表达式匹配错误?

尝试解析以下文本文件:

prefix1 prefix2 name1(
                 type1 name1,
                 type2 name2
                 );
Run Code Online (Sandbox Code Playgroud)

使用以下正则表达式:
\\s*prefix1\\s*prefix2\\s*(\\w[\\w\\d_]*).*\\(\\s*([^\\)]*\\))\\s*;\\s*
结果,我得到以下两个组(寄存器):

"name1(
             "
Run Code Online (Sandbox Code Playgroud)

"(
             type1 name1,
             type2 name2
             )"
Run Code Online (Sandbox Code Playgroud)

(此处引号限制字符串,包括\ n)

我不明白为什么第一组(\w[\w\d_]*)与下.*一部分匹配。而且,我不能摆脱不必要的尾巴!

我怎么了

添加:解析的正则表达式:

(cl-ppcre::parse-string "\\s*prefix1\\s*prefix2\\s*(\\w[\\w\\d_]*).*\\(\\s*([^\\)]*\\))\\s*;\\s*")
(:SEQUENCE (:GREEDY-REPETITION 0 NIL :WHITESPACE-CHAR-CLASS) "prefix1"
 (:GREEDY-REPETITION 0 NIL :WHITESPACE-CHAR-CLASS) "prefix2"
 (:GREEDY-REPETITION 0 NIL :WHITESPACE-CHAR-CLASS)
 (:REGISTER
  (:SEQUENCE :WORD-CHAR-CLASS
   (:GREEDY-REPETITION 0 NIL (:CHAR-CLASS :WORD-CHAR-CLASS :DIGIT-CLASS #\_))))
 (:GREEDY-REPETITION 0 NIL :EVERYTHING) #\(
 (:GREEDY-REPETITION 0 NIL :WHITESPACE-CHAR-CLASS)
 (:REGISTER
  (:SEQUENCE (:GREEDY-REPETITION 0 NIL (:INVERTED-CHAR-CLASS #\))) #\)))
 (:GREEDY-REPETITION 0 NIL :WHITESPACE-CHAR-CLASS) #\; …
Run Code Online (Sandbox Code Playgroud)

regex common-lisp cl-ppcre

5
推荐指数
1
解决办法
636
查看次数

在通用Lisp中提取正则表达式匹配

我一定在这里缺少一些非常基本的东西。

我需要从常见Lisp中的匹配项中提取捕获组。当我评估解释器(sbcl实现)时:

`(cl-ppcre::scan-to-strings ".*?(\\d).png" "sample1.png")`
Run Code Online (Sandbox Code Playgroud)

我得到:

"sample1.png"
#("1")
Run Code Online (Sandbox Code Playgroud)

但是,如果我将该表达式绑定到一个值,请说

`(setq number (cl-ppcre::scan-to-strings ".*(\\d).png" "sample1.png"))`
Run Code Online (Sandbox Code Playgroud)

number的值变为"sample1.png"。如何获得"1"打印的?

sbcl common-lisp cl-ppcre

3
推荐指数
1
解决办法
947
查看次数

cl-ppcre:替换正则表达式替换和反斜杠

可能这个问题真的很糟糕,但我被困住了.如何cl-ppcre:regex-replace-all更换反斜杠?

例如,我只想逃避一些字符,比如'"()等,所以我首先要用|替换,看看匹配是否正常:

    CL-USER> (princ (cl-ppcre:regex-replace-all "(['\\(\\)\"])"
"foo \"bar\" 'baz' (test)" "|\\1"))
    PRINTED: foo |"bar|" |'baz|' |(test|)
Run Code Online (Sandbox Code Playgroud)

好的,我们把斜线:

    CL-USER> (princ (cl-ppcre:regex-replace-all "(['\\(\\)\"])"
"foo \"bar\" 'baz' (test)" "\\\1"))
    PRINTED: foo "bar" 'baz' (test) ;; No luck
Run Code Online (Sandbox Code Playgroud)

不,我们有两个斜线:

    CL-USER> (princ (cl-ppcre:regex-replace-all "(['\\(\\)\"])"
"foo \"bar\" 'baz' (test)" "\\\\1"))
    PRINTED: foo \1bar\1 \1baz\1 \1test\1 ;; Got slash, but not \1
Run Code Online (Sandbox Code Playgroud)

也许是这样的?

(princ (cl-ppcre:regex-replace-all "(['\\(\\)\"])"
"foo \"bar\" 'baz' (test)" "\\\{1}"))
PRINTED: foo "bar" 'baz' (test) ;; Nope, no luck here
Run Code Online (Sandbox Code Playgroud)

当然,如果我在斜线之间放置空间就可以了,但我不需要它

(princ (cl-ppcre:regex-replace-all "(['\\(\\)\"])" …
Run Code Online (Sandbox Code Playgroud)

lisp regex common-lisp cl-ppcre

3
推荐指数
1
解决办法
273
查看次数

匹配CL-PPCRE的行尾

我有一个相当简单的正则表达式,在我的Ruby代码中运行得非常好,但拒绝使用我的Lisp代码.我只是想匹配一个URL(斜杠后跟一个单词,而不是更多).这是我在Ruby中使用的正则表达式:^\/\w*$

我希望这与匹配"/""/foo"不匹配"/foo/bar"

我尝试过以下方法:

(cl-ppcre:scan "^/\w*$" "/") ;works
(cl-ppcre:scan "^/\w*$" "/foo") ;doesn't work!
(cl-ppcre:scan "^/\w*$" "/foo/bar") ;works, ie doesn't match
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

regex common-lisp cl-ppcre

3
推荐指数
2
解决办法
93
查看次数

标签 统计

cl-ppcre ×4

common-lisp ×4

regex ×3

lisp ×1

sbcl ×1