因此,对于java中的regex,我想编写一个正则表达式,当且仅当模式前面没有某些字符时才会匹配。例如:
String s = "foobar barbar beachbar crowbar bar ";
如果bar前面没有foo,我想匹配。所以输出将是:
barbar
beachbar
crowbar
bar
我知道这可能是一个非常简单的问题。我正在努力学习正则表达式,但与此同时我需要一些工作才能正常工作。
答案 0 :(得分:194)
你想这样使用negative lookbehind
:
\w*(?<!foo)bar
(?<!x)
表示“只有在此点之前没有”x“。
有关详细信息,请参阅Regular Expressions - Lookaround。
修改:添加了\w*
以捕获之前的字符(例如“海滩”)。
答案 1 :(得分:1)
另一种选择是先匹配可选单词字符后跟 bar
,当匹配到时检查左边的不是 foobar
。
后视断言将在匹配 bar
之后运行。
\w*bar(?<!foobar)
\w*
匹配 0+ 个单词字符bar
逐字匹配(?<!foobar)
负向后视,断言当前位置 foobar
不直接向左。