英国邮政编码的正则表达式
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
。 ()
将这两个部分组合为 OR
ed。在这里你可以使用[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”一次或根本不表示
【讨论】:
以上是关于英国邮政编码的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章