英国邮政编码的正则表达式

Posted

技术标签:

【中文标题】英国邮政编码的正则表达式【英文标题】:Regular expression for UK postal codes 【发布时间】:2013-02-21 09:18:34 【问题描述】:

我正在制作一个应用程序,要求用户输入邮政编码并在其有效时输出该邮政编码。

我发现了以下模式,它可以正常工作:

String pattern = "^([A-PR-UWYZ](([0-9](([0-9]|[A-HJKSTUW])?)?)|([A-HK-Y][0-9]([0-9]|[ABEHMNPRVWXY])?)) [0-9][ABD-HJLNP-UW-Z]2)"; 

我对正则表达式知之甚少,如果有人能通过此声明与我交谈,那就太好了。主要看不懂?()的用法。

【问题讨论】:

“邮政编码”是指“邮政编码”吗? IE 大多数美国人会称之为“邮政编码”?如果是这种情况,您的目标是哪个国家/地区的代码? 抱歉不清楚,是的,我的意思是邮政编码和英国的,无论如何我知道这是有效的并且是正确的,因为我测试过它我特别不明白的是为什么?我只需要正则表达式解释 () 表示捕获组,正则表达式中的? 表示它前面的任何内容都是可选的。考虑搜索正则表达式教程,Oracle 提供的教程是一个好的开始。 您可以获取所有邮政编码的列表并查看它是否包含在其中 - 可能更简单 好的,为什么我的问题被编辑了? 【参考方案1】:

您的正则表达式具有以下内容:

^$ - 用于指示匹配输入的开始和结束的锚点。 [A-PR-UWYZ] - A 到 P 或 R 到 U 或 W、Y、Z 之间的任何字符。用方括号括起来的字符构成一个字符类,它允许任何括起来的字符,- 用于指示一个字符序列,如 [A-D] 允许 A、B、C 或 D。 ([0-9]|[A-HJKSTUW])? - 0-9 中的任意一个可选字符或由 [A-HJKSTUW] 指示的字符。 ? 使前面的部分成为可选的。 | 用于OR() 将这两个部分组合为 ORed。在这里你可以使用[0-9A-HJKSTUW] 代替这个。 [ABD-HJLNP-UW-Z]2 - 由字符类允许的字符组成的长度为 2 的序列。 2表示长度为2。所以[ABD-HJLNP-UW-Z]2等价于[ABD-HJLNP-UW-Z][ABD-HJLNP-UW-Z]

【讨论】:

非常感谢,这正是我一直在寻找的,喜欢人们简单明了地给你想要的答案【参考方案2】:

那个?表示出现 0 次或 1 次,并且括号会按照您的预期进行分组,修饰符将在组上起作用。正则表达式教程可能是这里最好的东西

http://www.vogella.com/articles/JavaRegularExpressions/article.html

我看了一眼,这对于练习/游戏来说似乎也是合理的,请参阅这个小程序

http://www.cis.upenn.edu/~matuszek/General/RegexTester/regex-tester.html

简单例子(ab)?

表示“ab”一次或根本不表示

【讨论】:

以上是关于英国邮政编码的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配英国邮政编码的前半部分

英国邮政编码的正则表达式

带空格的英国邮政编码正则表达式

带有空格的英国邮政编码的Java正则表达式[重复]

C# - 英国邮政编码正则表达式没有按预期工作?

用于识别英国邮政编码的 R 正则表达式