首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >球拍中括号内容的正则表达式

球拍中括号内容的正则表达式
EN

Stack Overflow用户
提问于 2016-09-13 10:36:55
回答 1查看 324关注 0票数 1

如何获取球拍中括号的内容?内容可能会有更多的括号。我试过了:

代码语言:javascript
运行
复制
(regexp-match #rx"((.*))" "(check)")

但是输出有三次"(check)“,而不是一次:

代码语言:javascript
运行
复制
'("(check)" "(check)" "(check)")

我只想要"check“而不是"(check)”。

编辑:对于嵌套括号,应返回内部块。因此(a (1 2) c)应该返回"a (1 2) c“。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-16 07:01:24

圆括号正在捕获且不匹配..因此,#rx"((.*))"对所有内容都进行了两次捕获。因此:

代码语言:javascript
运行
复制
(regexp-match #rx"((.*))" "any text")
; ==> ("any text" "any text" "any text")

结果列表将第一个作为整个匹配,然后是第一组acpturnig paren,然后是其中的第二组。如果你想匹配括号,你需要对它们进行转义:

代码语言:javascript
运行
复制
(regexp-match #rx"\\((.*)\\)" "any text")
; ==> #f
(regexp-match #rx"\\((.*)\\)" "(a (1 2) c)")
; ==> ("(a (1 2) c)" "a (1 2) c")

现在您可以看到第一个元素是整个匹配,因为匹配可能从搜索字符串中的任何位置开始,并在匹配最大的位置结束。第二个元素是唯一捕获的元素。

如果字符串包含附加的括号集,则此操作将失败。例如:

代码语言:javascript
运行
复制
(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)语法和朋友的递归正则表达式,但是球拍没有这个(还没有?)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39461437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档