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

b3b*_*bop 125 java regex

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

String s = "foobar barbar beachbar crowbar bar ";
Run Code Online (Sandbox Code Playgroud)

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

barbar
beachbar
crowbar
bar
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*fer 221

你想这样使用negative lookbehind:

\w*(?<!foo)bar
Run Code Online (Sandbox Code Playgroud)

其中的(?<!x)意思是"只有在此之前没有"x".

有关详细信息,请参阅正则表达式 -查找.

编辑:添加\w*以捕获之前的字符(例如"海滩").

  • @BradKent然后你可以问一个新的问题,详细说明你想要达到的目的,或者继续玩正则表达式直到你自己找到它.:) (3认同)
  • 需要做哪些修改才能与foo_arbitrary_bar不匹配?即foo不会立即在bar之前 (2认同)
  • 我相信@BradKent `(?&lt;!foo).*bar` 会匹配类似的东西。 (2认同)
  • @BradKent我没有在“不匹配”中读到您的“不”,这就是为什么我说它将匹配。那么,您的情况对我来说就像一个\ b(?!foo)\ w * bar \ b`。 (2认同)

The*_*ird 5

另一种选择是首先匹配可选单词字符bar,然后匹配,当匹配时检查直接左边的不是foobar

后行断言将在bar首先匹配后运行。

\w*bar(?<!foobar)
Run Code Online (Sandbox Code Playgroud)
  • \w*匹配0+单词字符
  • bar按字面意思匹配
  • (?<!foobar)负lookbehind,断言从当前位置foobar不直接向左。

正则表达式演示