另一个带有否定的正则表达式
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
根据下面的评论使用这个模式
(A(?:(?!A).)*?X(?:(?!B).)*?B)
A\S*X\S*B
试试这个简单的 regex.See 演示。
看起来是个简单的问题,但我想不出解决办法。我希望负面前瞻会有所帮助,但事实并非如此。 在这样的字符串中:
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
根据下面的评论使用这个模式
(A(?:(?!A).)*?X(?:(?!B).)*?B)
A\S*X\S*B
试试这个简单的 regex.See 演示。