对字符串进行Reg表达式验证

时间:2012-11-15 10:09:41

标签: java

我可以将Reg Expression用于以下用例吗?

我需要编写一个布尔方法,该方法接受一个应满足以下条件的String参数。

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

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

4 个答案:

答案 0 :(得分: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]$

答案 1 :(得分:1)

阅读字符串JavaDocs,尤其是关于String.matches()的部分以及documentation about regular expressions in Java

答案 2 :(得分:0)

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

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

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

([0-9]{2})

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

答案 3 :(得分: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位数。