0

我有一个字符串

xxx [[a]] yyy [[b]] zzz

如何编写一个正则表达式以返回 2 个[[a]]结果[[b]]

正则表达式\[\[.+\]\]只返回 1 个结果[[a]] yyy [[b]]

4

3 回答 3

2

默认情况下,量词本质上是贪婪的。他们会尽可能多地消费。由于.匹配任何字符,.+将匹配尽可能多的字符,并且只会在最后一个]].

您应该使用不情愿的量词 ( .+?),它只会匹配到第一次出现]]

\[\[.+?\]\]
于 2013-09-14T19:52:58.190 回答
1

我认为为了安全起见,最好在括号的主体上更具体。
例如 [[ [a-z]+]] 或 [[ [^\[\]]+]]。

看起来您正在使用成对的双括号[[-]]作为分隔符。

一般来说,你不应该.+?在任何更广泛的正则表达式上下文中使用 [[ ]] 形式。
因为即使它看起来不是贪心的,引擎也会随时
根据周围的表达式和它匹配的字符串将它变成贪婪的。

例如,

  string = '  this is [[XX]] and here is [[ZZ]] end  '
  regex  = '\[\[.+?\]\]\s*end'

  match  = '[[XX]] and here is [[ZZ]] end'
于 2013-09-14T21:29:40.100 回答
1

使用非贪心量词+?http://www.regular-expressions.info/repeat.html

此外,我最好使用否定字符类

`\[\[[^\]]+\]\]`

如果在您的一对方括号之间,您确定没有右方括号。.如果您知道可以找到什么以及想要匹配什么,则应避免使用。

于 2013-09-14T19:53:12.163 回答