Regex 用正则表达式查找不在另一个单词后面的单词

Regex 用正则表达式查找不在另一个单词后面的单词,regex,negative-lookbehind,Regex,Negative Lookbehind,为了匹配不在另一个特定单词后面的特定单词,我应该使用什么正则表达式模式 例如: 我正在寻找一个不在“xyz”之后的“abc”,因此以下内容将匹配: xxabc p abc 以下情况不会: xyz abc 谢谢 你需要这样的东西: (?<!xyz )abc (? 但语法会有所不同,具体取决于您使用的语言。例如,此语法在JavaScript中不起作用。最简单的方法是使用反向查找断言: (?<!xyz)(?<!xyz )abc 后一个正则表达式使用的是否定的lookba

为了匹配不在另一个特定单词后面的特定单词,我应该使用什么正则表达式模式

例如:

我正在寻找一个不在“xyz”之后的“abc”,因此以下内容将匹配:

xxabc

p abc
以下情况不会:

xyz abc

谢谢

你需要这样的东西:

(?<!xyz )abc
(?


但语法会有所不同,具体取决于您使用的语言。例如,此语法在JavaScript中不起作用。

最简单的方法是使用反向查找断言:

(?<!xyz)(?<!xyz )abc

后一个正则表达式使用的是否定的lookback断言,而不是否定的lookback断言。

这些答案使用了否定的lookback断言,这很好,但要注意,并非所有正则表达式引擎都支持这一点。例如,JavaScript正则表达式不支持。如果
xyz
紧跟在
abc
之前或之前的任何位置,是否希望它匹配失败
abc
?这个答案值得一提,因为它是唯一一个提供不涉及外观落后的解决方案的答案。但我不明白为什么您需要
((?!xyz))*
((?!xyz)。)*
,特别是在第一个字符已断开的情况下。当您将点放在前视字符前面时,它直到第二个字符才开始过滤。这就是正则表达式与字符串“xyz abc”不正确匹配的原因
@Alan Moore,很好的观点。谢谢你抓住了这一点。我修改了第一个括号表达式,以便它的主要目的是在xyz紧跟abc之前的情况下抓住xyz(没有任何中间字符)。谢谢。
^(?!xyz)*((?!xyz).)*abc