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

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

我找到了以下模式,它可以正常工作:

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

我对正则表达式知之甚少,如果有人能通过这个声明与我说话,那就太棒了。 我主要是不明白的?()使用。

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

  • ^$ – 用于指示匹配输入的开始和结束的锚点。
  • [A-PR-UWYZ] – A到P或R到U或W,Y,Z之间的任何字符。 方括号中的字符形成一个字符类,它允许任何包含的字符和-用于表示像[AD]允许A,B,C或D的字符序列。
  • ([0-9]|[A-HJKSTUW])? – 0-9中的可选字符或[A-HJKSTUW]指示的字符。 ? 使前一部分可选。 | 用于OR()将两部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或1次,并且括号按照您的预期进行分组,修饰符将对组起作用。 正则表达式教程可能是最好的

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

我有一个简短的外观,这对于练习/游戏看起来也很合理

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

简单的例子(ab)?

意味着’ab’一次或根本不意味着’ab’