Java 正则表达式,用于匹配前面没有其他内容的内容

Java 正则表达式,用于匹配前面没有其他内容的内容,java,regex,Java,Regex,因此,对于java中的正则表达式,我想编写一个正则表达式,当且仅当模式前面没有特定字符时才匹配。例如: String s = "foobar barbar beachbar crowbar bar "; 如果bar前面没有foo,我想匹配。因此,产出将是: barbar beachbar crowbar bar 我知道这可能是一个非常简单的问题。我正在尝试学习正则表达式,但与此同时,我现在需要一些东西来工作。您想像这样使用负回溯: \w*(?<!foo)bar \w*(? 其中,(?

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

String s = "foobar barbar beachbar crowbar bar ";
如果bar前面没有foo,我想匹配。因此,产出将是:

barbar
beachbar
crowbar
bar

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

您想像这样使用
负回溯

\w*(?<!foo)bar
\w*(?
其中,
(?表示“仅当在此点之前没有“x”时”

有关更多信息,请参阅


编辑:添加了
\w*
以捕获前面的字符(例如“beach”)。

另一个选项是首先匹配可选单词字符,然后再匹配
,当匹配后,检查直接位于左侧的不是
foobar

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

\w*bar(?<!foobar)
\w*条(?)?
  • \w*
    匹配0个以上的单词字符
  • bar
    按字面匹配
  • (?反向查找,从当前位置断言
    foobar
    不直接位于左侧

需要进行哪些修改才能与foo\u任意\u条不匹配?即foo不在前面bar@BradKent
(?我相信会匹配那样的东西。@emyller不。那会匹配foobazbar(foo不在foobazbar之前,所以它匹配)@BradKent我没有在“不匹配”中读到你的“不”,这就是我说它会匹配的原因。你的案例对我来说就像一个
\b(?!foo)\w*bar\b
。@BradKent然后你可以问一个新问题,详细说明你试图实现的目标,或者继续玩正则表达式,直到你自己找到它为止。:)