正则表达匹配第一次见面

时间:2013-09-14 19:50:02

标签: regex

我有一个像

这样的字符串
xxx [[a]] yyy [[b]] zzz

如何编写正则表达式以使用[[a]][[b]]

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

3 个答案:

答案 0 :(得分:2)

量词默认是贪婪的。他们会尽可能多地消费。由于.与任何字符匹配,.+将匹配尽可能多的字符数,并且它将仅在最后一个]]之前停止。

你应该使用不情愿的量词(.+?),它只会在第一次出现]]时才匹配:

\[\[.+?\]\]

答案 1 :(得分:1)

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

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

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

如果你的方括号之间你确定没有一个方括号。如果您知道可以找到的内容以及您想要匹配的内容,则应避免使用.

答案 2 :(得分:1)

我认为为了安全起见,最好更明确地对括号的主体进行更具体的说明 例如[[[a-z]+]]或,[[[^\[\]]+]]。

您似乎正在使用配对的双括号[[ - ]]作为分隔符。

一般情况下,您不应在任何更广泛的正则表达式上下文中使用[[.+?]]形式。
因为即使它看起来不贪婪,引擎也会随时变得贪婪 取决于周围的表达式和它匹配的字符串。

例如,

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

  match  = '[[XX]] and here is [[ZZ]] end'