否定并将多个正则表达式组合成一个

时间:2015-01-23 12:23:00

标签: regex

我有matches all excluded UK postcodes

这个正则表达式
^((AB)([15][0-6]|[24][1-5]|[3][0-9])|(BT)([1][1-79]?|[2346][0-9]?|[5][1-8]?|[7][014-9]?|[8][0-2]?|[9][2-4]?)|(DD)([1][01]?|[2-9])|(DG)([1][0-46]?|[2-9])|(EH)([1234][0-9]?|[5][1-5]?|[6-8]|[9][59]?)|(FK)([1][0-9]?|[2][0-2]?|[3-9])|(GY)([1-9])|(G)([1][1-5]?|[2][0-3]?|[3][1-4]?|[4][0-6]?|[5][1-38]?|[67][0-9]|[8][0-4]|[9])|(HS)[1-9]|(IM)([1-7]|[8][6]?|[9][9]?)|(IV)([14][0-9]|[2][0-8]|[3][0-26]|[5][1-6]|[6-9])|(JE)[1-4]|(KA)([12][0-9]?|[3][0]?|[4-9])|(KW)([1][0-7]?|[2-9])|(KY)([1][0-6]?|[2-8]|[9][9]?)|(ML)([1][0-2]?|[2-9])|(PA)([1246][0-9]?|[37][0-8]?|[589])|(PH)([1][0-8]?|[2][6]?|[3][16]?|[4][249]?|[5-9])|(TD)([1][0-13-4]?|[2-9])|(ZE)[1-3])

我需要与这个正则表达式结合,检查邮政编码格式是否正确。

^([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])))) {0,1}[0-9][A-Za-z]{2})$

我遇到的问题是从第一个邮政编码中做出否定 - 如果我试图将其包裹在[^()]正则表达式中爆炸

我如何绕过第一个并将其与第二个相结合作为一个正则表达式?

更新

我跟随了@georg的建议并在某处失败了。

It matches on excluded codes

^(?!((AB|ab)([15][0-6]|[24][1-5]|[3][0-9])|(BT|bt)([1][1-79]?|[2346][0-9]?|[5][1-8]?|[7][014-9]?|[8][0-2]?|[9][2-4]?)|(DD|dd)([1][01]?|[2-9])|(DG|dg)([1][0-46]?|[2-9])|(EH|eh)([1234][0-9]?|[5][1-5]?|[6-8]|[9][59]?)|(FK|fk)([1][0-9]?|[2][0-2]?|[3-9])|(GY|gy)([1-9])|(G|g)([1][1-5]?|[2][0-3]?|[3][1-4]?|[4][0-6]?|[5][1-38]?|[67][0-9]|[8][0-4]|[9])|(HS|hs)[1-9]|(IM|im)([1-7]|[8][6]?|[9][9]?)|(IV|iv)([14][0-9]|[2][0-8]|[3][0-26]|[5][1-6]|[6-9])|(JE|je)[1-4]|(KA|ka)([12][0-9]?|[3][0]?|[4-9])|(KW|kw)([1][0-7]?|[2-9])|(KY|ky)([1][0-6]?|[2-8]|[9][9]?)|(ML|ml)([1][0-2]?|[2-9])|(PA|pa)([1246][0-9]?|[37][0-8]?|[589])|(PH|ph)([1][0-8]?|[2][6]?|[3][16]?|[4][249]?|[5-9])|(TD|td)([1][0-13-4]?|[2-9])|(ZE|ze)[1-3]) {0,1}[0-9][A-Za-z]{2}$)([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])))) {0,1}[0-9][A-Za-z]{2})$

1 个答案:

答案 0 :(得分:0)

ATM我觉得自己像个冠军!

This does it

^(?!((AB|ab)([15][0-6]|[24][1-5]|[3][0-9])|(BT|bt)([1][1-79]?|[2346][0-9]?|[5][1-8]?|[7][014-9]?|[8][0-2]?|[9][2-4]?)|(DD|dd)([1][01]?|[2-9])|(DG|dg)([1][0-46]?|[2-9])|(EH|eh)([1234][0-9]?|[5][1-5]?|[6-8]|[9][59]?)|(FK|fk)([1][0-9]?|[2][0-2]?|[3-9])|(GY|gy)([1-9])|(G|g)([1][1-5]?|[2][0-3]?|[3][1-4]?|[4][0-6]?|[5][1-38]?|[67][0-9]|[8][0-4]|[9])|(HS|hs)[1-9]|(IM|im)([1-7]|[8][6]?|[9][9]?)|(IV|iv)([14][0-9]|[2][0-8]|[3][0-26]|[5][1-6]|[6-9])|(JE|je)[1-4]|(KA|ka)([12][0-9]?|[3][0]?|[4-9])|(KW|kw)([1][0-7]?|[2-9])|(KY|ky)([1][0-6]?|[2-8]|[9][9]?)|(ML|ml)([1][0-2]?|[2-9])|(PA|pa)([1246][0-9]?|[37][0-8]?|[589])|(PH|ph)([1][0-8]?|[2][6]?|[3][16]?|[4][249]?|[5-9])|(TD|td)([1][0-13-4]?|[2-9])|(ZE|ze)[1-3]))^(([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])))) {0,1}[0-9][A-Za-z]{2})$)