我有一些代码可以匹配一个非常简单的字符串模式:
XXnnnnnnnnn (2 alphanumeric, 9 numeric)
。
我正在使用这个正则表达式:
\w{2}\d{9}
。
现在我需要通过匹配任何以常量标记“AY
”开头的字符串以及任何包含11个重复字符的字符串(例如“11111111111
”或“00000000000
“)。
如何使用正则表达式排除子模式?
答案 0 :(得分:5)
试试这个
\b(?!AY)(?!(\w)\1{10})\w{2}\d{9}\b
基本上我只在你的正则表达式中添加\b
word boundaries以避免部分匹配。
您的限制是通过使用否定先行断言来实现的。
(?!AY)
如果模式以“AY”
(?!(\w)\1{10})
如果第一个单词字符再重复10次,则断言失败。
答案 1 :(得分:2)
您可以使用零宽度前瞻匹配器来排除这两种情况。
不匹配AY很容易:
(?!AY)
不匹配11个相同的字符更难。您需要使用后引用(这意味着正则表达式不再是严格规则),或者您可以明确匹配每个数字。
(?!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}