我正在制作一个应用程序,要求用户输入邮政编码,如果有效则输出邮政编码。
我找到了以下模式,它可以正常工作:
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 :(得分:2)
?意味着出现0或1次,并且括号按照您的预期进行分组,修饰符将对组起作用。正则表达式教程可能是最好的事情
http://www.vogella.com/articles/JavaRegularExpressions/article.html
我有一个简短的外观,对于练习/游戏看起来也很合理看到这个小程序
http://www.cis.upenn.edu/~matuszek/General/RegexTester/regex-tester.html
简单的例子(ab)?
表示'ab'一次或根本不表示
答案 1 :(得分:2)
你的正则表达式有以下几点:
^
和$
- 用于指示匹配输入的开始和结束的锚点。[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
。在这里,您可以使用[0-9A-HJKSTUW]
代替此。[ABD-HJLNP-UW-Z]{2}
- 由字符类允许的字符组成的长度为2的序列。 {2}
表示长度2.因此[ABD-HJLNP-UW-Z]{2}
相当于[ABD-HJLNP-UW-Z][ABD-HJLNP-UW-Z]