是否可以使用正则表达式创建匹配不包含某个字符串的片段的模式?
这个神奇的正则表达式会接受这个输入并检查括号之间的什么:
(foo bar) (barfoo) (zab) (foozab)
并且仅返回zab
,因为它在括号之间不包含foo
。
这是可能的,还是我应该只捕获括号之间的所有内容并使用langauge函数来排除它们?
答案 0 :(得分:7)
根据引擎的不同,您可以使用先行断言。
\(((?:(?!foo)[^)])+)\)
该正则表达式将匹配带括号的字符串,其中字符串内的字符与子表达式“foo”(在这种情况下只是一个字符串)不匹配。
这是扩展形式:
\( # match the opening (
( # capture the text inside the parens
(?: # we need another group, but don't capture it
(?!foo) # fail if the sub-expression "foo" matches at this point
[^)] # match a non-paren character
)+ # repeat that group
) # end the capture
\) # end the parens