我有一个字符串
xxx [[a]] yyy [[b]] zzz
如何编写一个正则表达式以返回 2 个[[a]]
结果[[b]]
正则表达式\[\[.+\]\]
只返回 1 个结果[[a]] yyy [[b]]
我有一个字符串
xxx [[a]] yyy [[b]] zzz
如何编写一个正则表达式以返回 2 个[[a]]
结果[[b]]
正则表达式\[\[.+\]\]
只返回 1 个结果[[a]] yyy [[b]]
默认情况下,量词本质上是贪婪的。他们会尽可能多地消费。由于.
匹配任何字符,.+
将匹配尽可能多的字符,并且只会在最后一个]]
.
您应该使用不情愿的量词 ( .+?
),它只会匹配到第一次出现]]
:
\[\[.+?\]\]
我认为为了安全起见,最好在括号的主体上更具体。
例如 [[ [a-z]+
]] 或 [[ [^\[\]]+
]]。
看起来您正在使用成对的双括号[[
-]]
作为分隔符。
一般来说,你不应该.+?
在任何更广泛的正则表达式上下文中使用 [[ ]] 形式。
因为即使它看起来不是贪心的,引擎也会随时
根据周围的表达式和它匹配的字符串将它变成贪婪的。
例如,
string = ' this is [[XX]] and here is [[ZZ]] end '
regex = '\[\[.+?\]\]\s*end'
match = '[[XX]] and here is [[ZZ]] end'
使用非贪心量词+?
。http://www.regular-expressions.info/repeat.html
此外,我最好使用否定字符类
`\[\[[^\]]+\]\]`
如果在您的一对方括号之间,您确定没有右方括号。.
如果您知道可以找到什么以及想要匹配什么,则应避免使用。