代码之家  ›  专栏  ›  技术社区  ›  AngryDuck

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

  •  2
  • AngryDuck  · 技术社区  · 12 年前

    我正在制作一个应用程序,要求用户输入邮政编码,并在有效的情况下输出邮政编码。

    我发现了以下模式,它正确工作:

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

    我对regex了解不多,如果有人能和我谈谈这句话,那就太好了。我主要不明白 ? 和使用 () .

    2 回复  |  直到 12 年前
        1
  •  2
  •   Naveed S    12 年前

    您的正则表达式包含以下内容:

    • ^ $ -用于指示匹配输入的开始和结束的锚。
    • [A-PR-UWYZ] -A到P或R到U或W、Y、Z之间的任何字符。用方括号括起来的字符组成一个字符类,该类允许任何括起来的字母和 - 用于指示允许a、B、C或D的字符序列,如[a-D]。
    • ([0-9]|[A-HJKSTUW])? -一个可选字符,0-9中的任意一个或[A-HJCSTUW]指示的字符。 ? 使前面的部分成为可选部分。 | 用于 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
  •  2
  •   Adrian    12 年前

    这个means出现0或1次,并且括号按照您的预期进行分组,修饰符将对组起作用。regex教程可能是这里最好的东西

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

    我看了一下,这似乎也很合理,练习/玩耍也可以看看这个小程序

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

    简单的例子(ab)?

    意思是“ab”一次或根本没有