2013-02-21 176 views
2

我在制作一个应用程序,要求用户输入邮政编码并输出邮政编码,如果邮政编码有效。英国邮政编码的正则表达式

我发现下面的模式,它正常工作:

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})"; 

我不知道很多关于正则表达式,这将是巨大的,如果有人可以通过这个说法劝我。我主要不了解?和使用()

+0

通过“邮编”,你的意思是“邮政编码”? IE大多数美国人称为“邮政编码”?如果是这种情况,您的目标是哪个国家的代码? – 2013-02-21 09:21:05

+0

对不起,不清楚,是的,我的意思是邮政编码和英国的那个,无论如何,我知道这个作品,是正确的,因为四测试它,我不明白特别是为什么?我只需要真正需要正则表达式解释 – AngryDuck 2013-02-21 09:23:13

+0

'()'表示捕获组,'?'在正则表达式中意味着任何先于它的是可选的。考虑寻找一个正则表达式教程,Oracle提供的教程是一个好的开始。 – jlordo 2013-02-21 09:23:19

回答

2

你的正则表达式有以下几点:

  • ^$ - 锚,用于指示启动和匹配输入的结束。
  • [A-PR-UWYZ] - A到P或R到U或W,Y,Z中的任何字符。用方括号括起来的字符形成一个字符类,它允许任何附加字符,并且-用于表示允许A,B,C或D的[AD]的字符序列。
  • ([0-9]|[A-HJKSTUW])? - 任意字符0 -9或由[A-HJKSTUW]指示的字符。 ?使前面的部分是可选的。 |适用于OR()将这两部分结合起来,编为OR。在这里你可以用[0-9A-HJKSTUW]代替这个。
  • [ABD-HJLNP-UW-Z]{2} - 由字符类允许的字符形成的长度为2的序列。 {2}表示长度为2.所以[ABD-HJLNP-UW-Z]{2}相当于[ABD-HJLNP-UW-Z][ABD-HJLNP-UW-Z]
+0

非常感谢你,这正是我一直在寻找的,当人们只是简单而简单地给你一个你想要的答案时爱它 – AngryDuck 2013-02-21 10:00:50

2

的?意味着会出现0或1次,并且括号会按照您的预期进行分组,修改器将对分组起作用。一个正则表达式教程可能是这里的最好的事情

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

我有一个简单的介绍一下,它似乎是合理的也是实践/播放看到这个小程序

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

简单的例子(AB)?

意味着“AB”一次或完全不