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

我对正则表达式知之甚少,如果有人能通过这个声明告诉我,那就太好了。我主要不明白?.()

4

2 回答 2

2

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

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

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

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

简单的例子(ab)?

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

于 2013-02-21T09:25:12.673 回答
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编辑的两个部分。在这里你可以用[0-9A-HJKSTUW]这个来代替。
  • [ABD-HJLNP-UW-Z]{2}- 由字符类允许的字符组成的长度为 2 的序列。{2}表示长度为2。所以[ABD-HJLNP-UW-Z]{2}等价于[ABD-HJLNP-UW-Z][ABD-HJLNP-UW-Z]
于 2013-02-21T09:42:21.677 回答