正则表达式,我可以排除字符对吗?

时间:2014-01-27 12:21:09

标签: regex

如何从正则表达式中排除字符对?

我正在尝试获得一个正则表达式,其中包含5个字母数字字符,后跟

除“XX”和“AD”之外的任何内容,其次是XX。

所以

D22D0ACXX 

将匹配,但以下两个将不匹配

D22D0ADXX   
D22D0XXXX. 

我的第一次尝试是:

([A-Z0-9]{5}[^(?AD)|(?XX)]XX)

但是这会将字符类part [^(?AD)|(?XX)]视为一个字符,所以我最后得到的是8个字符,而不是全部9个字符。

我可以排除成对的字符而不会进入后面的引用吗?

我需要捕获整个组,因此是外括号。否定的先行建议似乎没有这样做。

2 个答案:

答案 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})