不包括子模式的正则表达式

Regular expression excluding subpatterns

本文关键字:正则表达式 子模式 不包括      更新时间:2023-09-26

我有一些代码可以与一个非常简单的字符串模式匹配:CCD_ 1。

我正在使用以下正则表达式:CCD_ 2。

现在,我需要排除匹配任何以常量标记"AY"开头的字符串,以及任何具有11个重复字符的字符串(例如"11111111111"或"00000000000")。

如何使用正则表达式排除子模式?

试试这个

'b(?!AY)(?!('w)'1{10})'w{2}'d{9}'b

在Regexr 上查看

基本上,我只在正则表达式中添加了'b单词边界,以避免部分匹配。

您的限制是通过使用否定的前瞻性断言来实现的。

(?!AY)如果模式以"AY"开头,则断言失败

(?!('w)'1{10})如果第一个单词字符重复10次以上,则断言失败。

正则表达式的环视断言.info

您可以使用零宽度先行匹配器来排除这两种情况。

不匹配AY很容易:

 (?!AY)

不匹配11个相同的字符更加困难。您要么需要使用反向引用(这意味着regexp不再是严格的正则表达式),要么可以显式匹配每个数字。

(?!0{11}|1{11}|2{11}|…|9{11})  // 11 zeros, or 11 ones, or 11 twos, …
(?!(.)'1{10})  // A character, followed by itself 10 more times.

因此,这将生成完整的正则表达式:

(?!AY)(?!(.)'1{10})'w{2}'d{9}