我可以将Reg Expression用于以下用例吗?
我需要编写一个布尔方法,该方法接受一个应满足以下条件的String参数。
在这里,我编写了第一个要求的代码: [a-zA-Z0-9] {20} - 此表达式适用于第一种情况。我不知道如何编写完整的reg表达式来满足整个要求。 请帮忙。
答案 0 :(得分:2)
是的,可以使用正则表达式。
忽略“20个字符”部分并描述通过连接9位数字,2个字母,2个数字,1个字母和另一个数字创建的字符串。
^
\d
方便地描述了字符集[0-9]
,因此\d{9}
表示“九位数”\w
类过于宽泛,因此坚持[a-zA-Z]
来写一封信。$
作为参考,这个正则表达式意味着“字符串是九个字母,然后是12-15或99,然后是另一个字母”:
^[a-zA-Z]{9}(1[2-5]|99)[a-zA-Z]$
答案 1 :(得分:1)
答案 2 :(得分:0)
你的第一个要求已隐含在其余要求中,所以我会跳过它。然后,只需编写匹配每个部分的正则表达式代码:
[0-9]{9}[a-zA-Z]{2}...
对于可能是1到31的数字,有一个特殊的考虑因素。虽然可以在一个正则表达式中匹配它,但它将是冗长且难以理解的。相反,在正则表达式中执行基本匹配,并将此部分作为捕获组提取,方法是将其放入括号中:
([0-9]{2})
如果您使用Pattern
和Matcher
来应用正则表达式,并且您的字符串与模式匹配,那么您可以轻松获得两个字符,使用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位数。