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

如何使用Java正则表达式防止字符重复,java,regex,Java,Regex,我试图避免重复点字符“.”,并且只允许数字/字母 e、 g 我尝试使用: ^(?!\.\)([a-zA-Z0-9.\u\-]*)$ 但它仅适用于第二个示例,如何使其工作?使用String.replace()删除所有。字符 String a="blah...blah"; a = a.replace(".", ""); System.out.println(a); 其输出为blahblah使用捕获字符的反向引用: if (str.matches("(([\\w.-])(?!\\2))*"))

我试图避免重复点字符“.”,并且只允许数字/字母

e、 g

我尝试使用:
^(?!\.\)([a-zA-Z0-9.\u\-]*)$
但它仅适用于第二个示例,如何使其工作?

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

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

其输出为
blahblah

使用捕获字符的反向引用:

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

请注意,“字母、数字、下划线、点和破折号”可以写成
[\\w.-]


\w=[a-zA-Z0-9\]
如果破折号出现在第一个或最后一个破折号,则不需要转义。

如果非常接近,则需要将前瞻调整为
(?!.\\\\.{2})
,因此整个正则表达式是
([a-zA-Z0-9.\-]*)$/code>。请注意,当与
.matches()
一起使用时,您不需要锚定,因为它试图匹配整个字符串


如果您不希望任何非字母/数字连续重复,您可以改为使用
(?!.*([.\u-])\\ 1+
进行查找。

是否必须使用正则表达式?(可能有一个更简单的选择)你解决了吗?是的,我更喜欢regex。你的例子非常接近我的要求,但是它检测到所有重复,让我更具体一点,我只想防止点(.)字符重复,它可以出现多次,但不能按顺序出现。我允许所有a-zA-Z0-9和-(破折号)(下划线)(反斜杠)和(圆点,但不按顺序)。我问这个问题是因为我想防止路径遍历。我写了反斜杠,我是说普通斜杠。你确定这样行吗?我试过了,但一切都是真的。也许是反斜杠吧?在我的回答中,反斜杠是转义的(就像它们在用作java字符串时需要转义一样),但该站点需要它们不转义:
^(?。*.{2})([a-zA-Z0-9.\u\-]*)$
是的,我错过了。谢谢
if (str.matches("(([\\w.-])(?!\\2))*"))
    // no chars are repeated