我尽量避免重复点字符''。并且只允许数字/字母
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._\-]*)$
但它只适用于第二个例子,我怎样才能使它工作?
答案 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
。