我想拒绝以BT
开头的字符串(包括大小写)
原始正则表达式:
^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z] [A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))\s?[0-9][A-Za-z]{2})$
字符串
负后向正则表达式:
(?<!([bB][tT]))(^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z] [A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))\s?[0-9][A-Za-z]{2})$)
型
但是这个正则表达式仍然接受BT444CC
第二个组正在捕获t
我如何防止这种情况?
1条答案
按热度按时间hjqgdpho1#
你不需要向后查找,你需要在字符串的开头
(?![Bb][Tt])
处向前查找。另外,你需要用一个非捕获组来包围整个模式,否则,lookahead将只限制第一个
|
之前的部分。您可以使用
字符串
参见regex demo。