我有一个像
这样的字符串xxx [[a]] yyy [[b]] zzz
如何编写正则表达式以使用[[a]]
和[[b]]
\[\[.+\]\]
这样的正则表达式只返回1个结果[[a]] yyy [[b]]
答案 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'