【发布时间】:2012-03-07 13:13:58
【问题描述】:
使用 Java 中的正则表达式,我想编写一个正则表达式,当且仅当模式前面没有某些字符时才会匹配。例如:
String s = "foobar barbar beachbar crowbar bar ";
如果 bar 前面没有 foo,我想匹配。所以输出将是:
barbar
beachbar
crowbar
bar
【问题讨论】:
使用 Java 中的正则表达式,我想编写一个正则表达式,当且仅当模式前面没有某些字符时才会匹配。例如:
String s = "foobar barbar beachbar crowbar bar ";
如果 bar 前面没有 foo,我想匹配。所以输出将是:
barbar
beachbar
crowbar
bar
【问题讨论】:
另一种选择是首先匹配可选的单词字符,然后是bar,当匹配时,检查左边的不是foobar。
lookbehind 断言将在首先匹配bar 之后运行。
\w*bar(?<!foobar)
\w* 匹配 0+ 个单词字符bar 字面匹配(?<!foobar) 负向后视,从当前位置断言 foobar 不是直接向左。【讨论】:
你想像这样使用negative lookbehind:
\w*(?<!foo)bar
其中(?<!x) 的意思是“仅当它在此点之前没有“x”时”。
更多信息请参见Regular Expressions - Lookaround。
编辑:添加\w* 以捕获之前的字符(例如“海滩”)。
【讨论】:
(?<!foo).*bar 会匹配这样的东西,我相信。
\b(?!foo)\w*bar\b。