Java Regular Expression用于验证最后两个字符

时间:2014-05-12 07:14:06

标签: java regex

我想验证一个表达式。 我能够达到90%但是我在一个条件下失败了。 我们如何添加一个表达式以确保在少数字符后面的特定字符应该是一个字母,如果有任何字符应该是一个数字。

Eg: [A-Z1-9]{1,30}?[A-Z]{0,1}$[1-9]{0,1}

模式最多可包含32个字符,最后2个字符是可选的 如果字符超过30,则应以字母[A-Z]开头,并且只应出现一次{0,1} 第32个字符应该是一个数字[1-9],它应该只出现一次,如果存在第31个字符则应该出现 你能帮帮我吗?

2 个答案:

答案 0 :(得分:4)

尝试以下模式。这匹配1-29"正常"字符,或带有可选后缀的正好30个字符。

//                  Matches 29 chars    Matches 30 chars plus suffix
//                        |                      |
//                ----------------------------------------------
//                |               ||                           |
String pattern = "([A-Z\\d]{1,29})|([A-Z\\d]{30}([A-Z]\\d){0,1})";
//                 ^^^^^^^^         ^^^^^^^^

应调整带下划线的部分(^^^^),以描述您在前30个字符中允许的字符集。

注意:我已将0-9用作有效数字,这更为正常。如果您确实需要1-9,则可以调整代码。

答案 1 :(得分:1)

您的文字不清楚。如果存在第31个字符,则第32个字符是可选的还是必需的?

[A-Z1-9]{0,30}?(?:[A-Z]|[A-Z][1-9])?

这个允许30个字符,31个字符或32个字符。

[A-Z1-9]{0,30}?(?:[A-Z][1-9])?

这个允许30个字符或32个字符(即如果存在31个字符则需要32个字符。)