如何从正则表达式中排除字符对?
我正在尝试获得一个正则表达式,其中包含5个字母数字字符,后跟
除“XX”和“AD”之外的任何内容,其次是XX。
所以
D22D0ACXX
将匹配,但以下两个将不匹配
D22D0ADXX
D22D0XXXX.
我的第一次尝试是:
([A-Z0-9]{5}[^(?AD)|(?XX)]XX)
但是这会将字符类part [^(?AD)|(?XX)]视为一个字符,所以我最后得到的是8个字符,而不是全部9个字符。
我可以排除成对的字符而不会进入后面的引用吗?
我需要捕获整个组,因此是外括号。否定的先行建议似乎没有这样做。
答案 0 :(得分:2)
使用否定lookahead:
([A-Z0-9]{5}(?!(AD|XX)XX).{4})
答案 1 :(得分:1)
不要将它视为一个字符类,而应将其视为具有否定先行的替代,例如:
([A-Z0-9]{5}(?!(AD|XX)XX))
然后,如果你需要尾巴,请在表面后面加上它,例如:
([A-Z0-9]{5}(?!(AD|XX)XX)[A-Z0-9]{4})