另一个带有否定的正则表达式

Another RegEx with negation

看起来是个简单的问题,但我想不出解决办法。我希望负面前瞻会有所帮助,但事实并非如此。 在这样的字符串中:

AYB AXZB AZB

我希望将 A 和 B 的组合与它们之间的 X 以及除 之外的任何其他内容相匹配 另一个 A 或 B。也就是说,我应该能够仅在上一行中找到 'AXZB'。 A、X 和 B 不仅仅是现实生活中的字符,所以否定不是一个选项。

更新:

澄清要求 - 如上所述,A、X 和 B 不仅是字符,而且是多字符模式,因此 [^AB] 不是一个选项

正确答案:

(A(?:(?!(A|B)).)*?X(?:(?!(A|B)).)*?B)

试试 /a[^ab\s]?x[^ab\s]?b/i。这将匹配任何 "a" 然后任何字符(除了另一个 "a"、"b" 或 space)直到 "b" 只要有一个 "x" 在某处。

这是一个使用 JavaScript 的例子。

var string = 'AyB AXB AxB blabla'; // change this string to test the regex

if (string.match(/a[^ab\s]?x[^ab\s]?b/i)) {
  alert('The string found this match: ' + /a[^ab\s]?x[^ab\s]?b/i.exec(string));
} else {
  alert('There was no match found in the string.');
}

在此处编辑和测试:https://regex101.com/r/hO3qY3/2

试试这个:

\bA(?=\S*?X)[^AB]*?B\b

这个简单的模式怎么样

A\S*X\S*B

Demo


根据下面的评论使用这个模式

(A(?:(?!A).)*?X(?:(?!B).)*?B)  

Demo

A\S*X\S*B

试试这个简单的 regex.See 演示。

https://regex101.com/r/sH8aR8/50