0

我可以将 Reg 表达式用于以下用例吗?

我需要编写一个布尔方法,该方法采用应满足以下条件的字符串参数。

  • 20 个字符长度的字符串。
  • 前 9 个字符将是一个数字
  • 接下来的 2 个字符将是字母
  • 接下来的 2 个字符将是一个数字。(1 到 31 或 99)
  • 接下来的 1 个字符将是一个字母
  • 最后 6 个字符将是一个数字。

在此,我为第一个要求编写了代码: [a-zA-Z0-9]{20} - 此表达式适用于第一种情况。我不知道如何编写一个完整的 reg 表达式来满足整个要求。请帮忙。

4

4 回答 4

2

是的,可以为此使用正则表达式。

忽略“20 个字符”部分,描述一个由 9 个数字、2 个字母、2 个数字、1 个字母和另一个数字连接而成的字符串。

  • 从字符串 start 开始:^
  • 然后是9位数。\d方便地描述字符集[0-9],因此表示\d{9}“九位数字”
  • 然后是2个字母。\w课程太宽泛,所以坚持要一个[a-zA-Z]字母。
  • 然后又是两位数。它们似乎来自一个受限的集合,所以用交替和分组来描述这个集合。
  • 然后是另一个字母和另一个数字。
  • 最后,你必须在字符串的末尾结束:$

作为参考,这个正则表达式的意思是“字符串是九个字母,然后是 12-15 或 99,然后是另一个字母”:

^[a-zA-Z]{9}(1[2-5]|99)[a-zA-Z]$
于 2012-11-15T10:22:03.650 回答
1

阅读 String JavaDocs,尤其是关于String.matches()的部分以及关于 Java 中正则表达式的文档

于 2012-11-15T10:15:12.300 回答
0

您的第一个要求已经隐含在其余的要求中,所以我将跳过它。然后,只需编写与每个部分一个接一个匹配的正则表达式代码:

[0-9]{9}[a-zA-Z]{2}...

对于可能是 1 到 31 的数字有一个特殊考虑。虽然可以在一个正则表达式中匹配它,但它会很冗长且难以理解。相反,在正则表达式中执行基本匹配,并将这部分提取为捕获组,将其放入括号中:

([0-9]{2})

如果您使用PatternandMatcher应用您的正则表达式,并且您的字符串与模式匹配,那么您可以轻松地获得两个字符,用于Integer.parseInt()将它们转换为整数(这是完全安全的,因为您知道这两个字符是数字),并且然后正常检查值。

于 2012-11-15T10:22:43.637 回答
0

这个正则表达式需要

  ^[0-9]{9}[a-zA-Z]{2}([1-9]|[1-2][0-9]|3[0-1]|99)[a-zA-Z]([0-9]{6})$

开头需要 9 个字母,后接 2 个字母,后接 1 到 31 或 99 之间的数字,后接字母,后接 6 位数字。

于 2012-11-15T10:59:49.177 回答