正则表达式匹配的东西,如果没有其他东西

时间:2012-02-16 05:50:24

标签: java regex

因此,对于java中的regex,我想编写一个正则表达式,当且仅当模式前面没有某些字符时才会匹配。例如:

String s = "foobar barbar beachbar crowbar bar ";

如果bar前面没有foo,我想匹配。所以输出将是:

barbar
beachbar
crowbar
bar

我知道这可能是一个非常简单的问题。我正在努力学习正则表达式,但与此同时我需要一些工作才能正常工作。

2 个答案:

答案 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 不直接向左。

Regex demo