如何获取球拍中括号的内容?内容可能会有更多的括号。我试过了:
(regexp-match #rx"((.*))" "(check)")
但是输出有三次"(check)“,而不是一次:
'("(check)" "(check)" "(check)")
我只想要"check“而不是"(check)”。
编辑:对于嵌套括号,应返回内部块。因此(a (1 2) c)应该返回"a (1 2) c“。
发布于 2016-09-16 07:01:24
圆括号正在捕获且不匹配..因此,#rx"((.*))"
对所有内容都进行了两次捕获。因此:
(regexp-match #rx"((.*))" "any text")
; ==> ("any text" "any text" "any text")
结果列表将第一个作为整个匹配,然后是第一组acpturnig paren,然后是其中的第二组。如果你想匹配括号,你需要对它们进行转义:
(regexp-match #rx"\\((.*)\\)" "any text")
; ==> #f
(regexp-match #rx"\\((.*)\\)" "(a (1 2) c)")
; ==> ("(a (1 2) c)" "a (1 2) c")
现在您可以看到第一个元素是整个匹配,因为匹配可能从搜索字符串中的任何位置开始,并在匹配最大的位置结束。第二个元素是唯一捕获的元素。
如果字符串包含附加的括号集,则此操作将失败。例如:
(regexp-match #rx"\\((.*)\\)" "(1 2 3) (a (1 2) c)")
; ==> ("(1 2 3) (a (1 2) c)" "1 2 3) (a (1 2) c")
这是因为表达式没有嵌套意识。要意识到这一点,你需要像Perl中的那些带有(?R)
语法和朋友的递归正则表达式,但是球拍没有这个(还没有?)
https://stackoverflow.com/questions/39461437
复制相似问题