如何否定正则表达式中的字符串

COM*_*ARD 2 regex

我知道三件事...

1)我知道:

a.{1,250}?z
Run Code Online (Sandbox Code Playgroud)

将检查 a 是否在 z 的 250 个字符以内。

2)我知道

a[^b]{1,250}?z
Run Code Online (Sandbox Code Playgroud)

将检查 a 是否在 z 的 250 个字符以内,但这些字符都不是 b。

3)我也知道

a[^bad]{1,250}?z
Run Code Online (Sandbox Code Playgroud)

将检查 a 是否在 z 的 250 个字符以内,但这些字符都不是 b、a 或 d。

4)

我将如何检查 a 是否出现在 z 的 250 个字符内,但单词 bad 没有出现在它们之间?

想象“字符串”需要完全匹配(就像在谷歌搜索中一样),伪代码看起来像:

a[^"bad"]{1,250}?z
Run Code Online (Sandbox Code Playgroud)

Avi*_*Raj 5

简单,使用消极的前瞻。

a(?:(?!bad).){1,250}?z
Run Code Online (Sandbox Code Playgroud)

(?:(?!bad).)将匹配任何字符(换行符除外),但不匹配 substring bad

演示

而且您必须使用锚点或单词边界才能进行精确匹配,否则上述正则表达式将匹配adcczacbadccz输入。

\ba(?:(?!bad).){1,250}?z\b
Run Code Online (Sandbox Code Playgroud)