正则表达式用于匹配某些内容(如果没有其他内容)


164

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

String s = "foobar barbar beachbar crowbar bar ";

如果bar不以foo开头,我想匹配。因此输出将是:

barbar
beachbar
crowbar
bar

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

Answers:


277

您想这样使用negative lookbehind

\w*(?<!foo)bar

其中的(?<!x)意思是“仅在此点之前没有“ x”。

有关更多信息,请参见正则表达式-环顾四周

编辑:添加\w*来捕获之前的字符(例如“海滩”)。


2
需要进行哪些修改才能不匹配foo_arbitrary_bar?即foo不在紧接杠前
Brad Kent

1
(?<!foo).*bar我相信@BradKent 会匹配类似的东西。
emyller

@emyller不。会匹配foobazbar(foo不在foobazbar之前,因此匹配)
Brad Kent

2
@BradKent我没有在“不匹配”中读到您的“不”,这就是为什么我说它将匹配。那你的情况\b(?!foo)\w*bar\b对我来说就像一个。
emyller '18

4
@BradKent然后,您可以提出一个新问题,详细说明您要实现的目标,或者继续使用正则表达式,直到您自己找到它为止。:)
emyller '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.