基本上,我需要一个匹配英国邮政编码中的第一个字母序列(简单)的正则表达式和另一个匹配以下数字的正则表达式(不那么容易)。
可能的组合和匹配的示例:
AA9A 9AA regex1: AA regex2: 9
A9A 9AA regex1: A regex2: 9
A9 9AA regex1: A regex2: 9
A99 9AA regex1: A regex2: 99
AA9 9AA regex1: AA regex2: 9
AA99 9AA regex1: AA regex2: 99
poscodes中的空格只是为了清晰起见,它们可能存在也可能不存在,因此必须予以忽视。
我可以使用这两个正则表达式的一些帮助,尤其是regex2(匹配数字)。顺便说一下,我将在MySQL 5.6中运行它
更新:请注意:无论如何,最后3个字符将始终被忽略,这是唯一始终适用的模式 - 从我的示例中可以看到它。
UPDATE2:很抱歉,如果我之前不够清楚 - 我不需要验证邮政编码,我需要提取区号和区号。
UPDATE3:再次强调:必须忽略空格,可以是AA99 9AA
或AA999AA
- 在这两种情况下,regex2(提取编号)都应该是{ {1}}
UPDATE4:感谢您的所有答案,遗憾的是我发现MySQL无法提取正则表达式匹配。要走的路,MySQL,再次被证明是无用的。
答案 0 :(得分:3)
您可以使用此正则表达式:
([A-Z]+)([0-9]+).*?[A-Z0-9]{3}
并使用匹配的群组#1
和#2
答案 1 :(得分:1)
这个正则表达式:
([A-Z]+)([0-9]+)([A-Z ]*[0-9][A-Z]{2})
根据MySQL的POSIX ERE正则表达式实现的RegexBuddy 4模拟工作如下:
Input G1 G2 G3
-------- --- --- ------
AA9A 9AA AA 9 A 9AA
A9A 9AA A 9 A 9AA
A9 9AA A 9 9AA
A99 9AA A 99 9AA
AA9 9AA AA 9 9AA
AA99 9AA AA 99 9AA
AA9A9AA AA 9 A9AA
A9A9AA A 9 A9AA
A99AA A 9 9AA
A999AA A 99 9AA
AA99AA AA 9 9AA
AA999AA AA 99 9AA
说明:
([A-Z]+) # captures one or more letters
([0-9]+) # captures one or more digits
( # starts 3rd capture group
[A-Z ]* # captures zero or more letters or space
[0-9] # captures exactly one digit
[A-Z]{2} # captures exactly two letters
) # ends 3rd capture group
如果我错过了一个无效的测试用例,请告诉我,我会看到我能做什么
答案 2 :(得分:0)
"[A-Z](?:\\D\\d\\D|\\d\\D|\\d|\\d{2}|\\D\\d|\\D\\d\\d|EI)\\s??\\d{1}\\D{2}"
对我来说效果很好。
这有点复杂,因为我用它从ONE LINE ADDRESS获取邮政编码(整个地址包含城市,国家,街道名称等,不用于验证邮政编码)。
我在我的生产环境中使用它。
答案 3 :(得分:0)
我认为这可以满足您的需求:
([A-Z]{1,2})(\d+)[A-Z]?\s?\d+[A-Z]{1,2}
我已经将捕获组用于你所追求的第一和第二部分。我假设您想要邮政编码第一部分中的数字。