我可以将 Reg 表达式用于以下用例吗?
我需要编写一个布尔方法,该方法采用应满足以下条件的字符串参数。
- 20 个字符长度的字符串。
- 前 9 个字符将是一个数字
- 接下来的 2 个字符将是字母
- 接下来的 2 个字符将是一个数字。(1 到 31 或 99)
- 接下来的 1 个字符将是一个字母
- 最后 6 个字符将是一个数字。
在此,我为第一个要求编写了代码: [a-zA-Z0-9]{20} - 此表达式适用于第一种情况。我不知道如何编写一个完整的 reg 表达式来满足整个要求。请帮忙。
我可以将 Reg 表达式用于以下用例吗?
我需要编写一个布尔方法,该方法采用应满足以下条件的字符串参数。
在此,我为第一个要求编写了代码: [a-zA-Z0-9]{20} - 此表达式适用于第一种情况。我不知道如何编写一个完整的 reg 表达式来满足整个要求。请帮忙。
是的,可以为此使用正则表达式。
忽略“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]$
阅读 String JavaDocs,尤其是关于String.matches()的部分以及关于 Java 中正则表达式的文档。
您的第一个要求已经隐含在其余的要求中,所以我将跳过它。然后,只需编写与每个部分一个接一个匹配的正则表达式代码:
[0-9]{9}[a-zA-Z]{2}...
对于可能是 1 到 31 的数字有一个特殊考虑。虽然可以在一个正则表达式中匹配它,但它会很冗长且难以理解。相反,在正则表达式中执行基本匹配,并将这部分提取为捕获组,将其放入括号中:
([0-9]{2})
如果您使用Pattern
andMatcher
应用您的正则表达式,并且您的字符串与模式匹配,那么您可以轻松地获得两个字符,用于Integer.parseInt()
将它们转换为整数(这是完全安全的,因为您知道这两个字符是数字),并且然后正常检查值。
这个正则表达式需要
^[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 位数字。