我有一个正则表达式,用于验证英国邮政编码,但现在我想提取代码的组成部分,我感到困惑.对于那些不知道英国邮政编码的例子的人是'WC1 1AA','WC11 1AA'和'M1 1AA'.
下面的正则表达式(格式化道歉)处理\s{0,}
左侧和右侧部分之间缺少空格(这是位)并且仍然有效(这很好).
(?:(?:A[BL]|B[ABDHLNRST]?|C[ABFHMORTVW]|D[ADEGHLNTY]|E[CHNX]?|F[KY]|G[LUY]?|H[ADGPRSUX]|I[GMPV]|JE|K[ATWY]|L[ADELNSU]?|M[EKL]?|N[EGNPRW]?|O[LX]|P[AEHLOR]|R[GHM]|S[AEGKLMNOPRSTWY]?|T[ADFNQRSW]|UB|W[ACDFNRSV]?|YO|ZE)\d(?:\d|[A-Z])?\s{0,}\d[A-Z]{2})
我希望能够现在提取左侧和右侧,我知道括号用于此,但是那里已经有括号,并且正则表达式规范不易阅读.所以我想这些括号需要更换,任何人都可以帮我修改括号吗?
我可以看到其他人会发现这个使用正则表达式,所以请随意使用它来验证英国邮政地址.
实际上,括号用于提取,而不是括号.(?:表达式中的结构是如何防止括号执行提取.您可能需要:
(?:((?:A[BL]|B[ABDHLNRST]?|C[ABFHMORTVW]|D[ADEGHLNTY]|E[CHNX]?|F[KY]|G[LUY]?|H[ADGPRSUX]|I[GMPV]|JE|K[ATWY]|L[ADELNSU]?|M[EKL]?|N[EGNPRW]?|O[LX]|P[AEHLOR]|R[GHM]|S[AEGKLMNOPRSTWY]?|T[ADFNQRSW]|UB|W[ACDFNRSV]?|YO|ZE)\d(?:\d|[A-Z])?)\s{0,}(\d[A-Z]{2}))
顺便说一句,我也会做出这样的改变:
(?:((?:A[BL]|B[ABDHLNRST]?|C[ABFHMORTVW]|D[ADEGHLNTY]|E[CHNX]?|F[KY]|G[LUY]?|H[ADGPRSUX]|I[GMPV]|JE|K[ATWY]|L[ADELNSU]?|M[EKL]?|N[EGNPRW]?|O[LX]|P[AEHLOR]|R[GHM]|S[AEGKLMNOPRSTWY]?|T[ADFNQRSW]|UB|W[ACDFNRSV]?|YO|ZE)\d(?:\d|[A-Z])?)\s*(\d[A-Z]{2}))
因为\ s {0,}是写\*的愚蠢方式.