如何使用Java正则表达式防止char重复

时间:2016-11-06 13:50:37

标签: java regex

我尽量避免重复点字符''。并且只允许数字/字母

e.g。

"blah...blah".matches(rex)) //false
 "..blablah".matches(rex)) //false
"blablah..".matches(rex)) //false
"blab.lah".matches(rex)) //true
"bla.blah".matches(rex)) //true

我尝试过使用: ^(?!\.\.)([a-zA-Z0-9._\-]*)$ 但它只适用于第二个例子,我怎样才能使它工作?

3 个答案:

答案 0 :(得分:2)

使用对捕获角色的反向引用:

if (str.matches("(([\\w.-])(?!\\2))*"))
    // no chars are repeated

请参阅live demo

请注意,“字母,数字,下划线,点和短划线”可以写为[\\w.-] \w == [a-zA-Z0-9_]如果它出现在第一个或最后一个,则不需要转义。

答案 1 :(得分:2)

您非常接近,需要将前瞻调整为(?!.*\\.{2}),因此整体正则表达式为^(?!.*\\.{2})([a-zA-Z0-9._\-]*)$。请注意,在与.matches()一起使用时,您不需要锚点,因为它会尝试匹配整个字符串。

如果您不希望任何非字母/数字连续重复,则可以使用(?!.*([._-])\\1+)作为lookeahed。

答案 2 :(得分:0)

使用String.replace()删除所有'.'个字符。

String a="blah...blah";
a = a.replace(".", "");
System.out.println(a);

此输出为blahblah