匹配字符串在java正则表达式中没有两个连续字符作为数字

时间:2013-10-29 20:43:47

标签: java regex

我想找到/匹配不包含两个连续字符的字符串作为数字。

例如,在以下字符串中:

12AB

1ab2

1a2b

AB12

我想选择第2和第3个字符串 - 1ab2和1a2b。

现在已经尝试写了几个小时的matcher正则表达式:(

非常感谢您的帮助..

3 个答案:

答案 0 :(得分:2)

最简单的事情就是

if ( ! myString.matches( ".*\\d\\d.*" ))

但是如果你想要一个实际的正则表达式,在外面没有“not”逻辑,那么总是

"\\D*(\\d\\D+)*\\d?"

这匹配任意数量的“数字”字符(\d),前提是每个字符后跟一个或多个“非数字”字符(\D)。开头可以选择性地使用一些非数字,最后可以选择多一个数字。

答案 1 :(得分:1)

您可以使用这个基于前瞻性的正则表达式:

"^((?!\\d{2}).)*$"

"11ab2".matches("^((?!\\d{2}).)*$"); // false
"1pab2".matches("^((?!\\d{2}).)*$"); // true
"1pa52".matches("^((?!\\d{2}).)*$"); // false

(?!\\d{2}).表示匹配一个字符,如果它后面没有2位数字。

答案 2 :(得分:1)

如果你需要一个匹配的正则表达式,如果没有两个连续的数字(而不是写一个匹配,如果有两个连续的数字然后使用!),那么有几种可能性,至少:

(1)否定前瞻:

if (myString.matches ("^(?!.*\\d\\d).*")) 

你告诉匹配者,“请匹配,如果你能找到字符串的开头没有跟随任何字符序列后跟两位数的模式”。

(2)蛮力:

if (myString.matches ("\\D*(\\d\\D+)*\\d?"))

\\D匹配任何不是数字的东西。这样设置使得源中出现的任何数字必须后跟非数字或字符串的结尾。

编辑:之前的版本有^$,如果您使用的是find,那么这是必需的,但如果您使用的是matches则不是。