连字符不';在Java的正则表达式中似乎不起作用

连字符不';在Java的正则表达式中似乎不起作用,java,regex,Java,Regex,我尝试了不同的方法使特殊字符“-”起作用,但当我尝试在代码中测试正则表达式时,它似乎不起作用。我试过的例子如下 [^(a-zA-Z0-9\\\\@#$%!.'{}_-~`())] 上面的方法不起作用,因为它会搜索介于“\u1”到“~”之间的字符。然后我试了一下 [^(a-zA-Z0-9\\\\@#$%!.'{}_~`()\\-)] [^(a-zA-Z0-9-\\\\@#$%!.'{}_~`())] [^(a-zA-Z0-9\\-\\\\@#$%!.'{}_~`())] 如果我在要搜索的字符串

我尝试了不同的方法使特殊字符“-”起作用,但当我尝试在代码中测试正则表达式时,它似乎不起作用。我试过的例子如下

[^(a-zA-Z0-9\\\\@#$%!.'{}_-~`())]
上面的方法不起作用,因为它会搜索介于“\u1”到“~”之间的字符。然后我试了一下

[^(a-zA-Z0-9\\\\@#$%!.'{}_~`()\\-)]
[^(a-zA-Z0-9-\\\\@#$%!.'{}_~`())]
[^(a-zA-Z0-9\\-\\\\@#$%!.'{}_~`())]
如果我在要搜索的字符串中输入“-”,则上述各项似乎都不起作用。当我尝试在中进行测试时,上面的表达式起作用


它总是抛出给定的异常。所有其他不带“-”的组合似乎都有效

连字符在字符类中具有特殊意义。要包含它,请将其作为类中的第一个或最后一个字符。例如,
[-A-Z]
[^A-Z-]

这个
[^(A-zA-Z0-9\\-\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$%!{/code>在Java字符串文本中有正确的转义regex特殊字符的方法。但是,它是一个否定的字符类。你的意思是类似于
String pat=“[a-zA-Z0-9\\-\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$%!.{}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\?你的模式应该匹配什么?是的,应该是否定的。如果匹配器返回TRUE,则会抛出给定的异常。您知道您只检查字符串中是否至少包含一个字符,而不是集合/范围中定义的字符吗?也许您需要
.matches()
(而不是
find()
)与
“[^…]+”
regex?下面的答案是否解决了您的问题?
EXTERNAL_USER_INVALID_PATTERN = "[^(a-zA-Z0-9\\\\@#$%!.'{}_~`()\\-)]"
Pattern p = Pattern.compile(X.EXTERNAL_USER_INVALID_PATTERN);
if(p.matcher(objectName).find() || objectName.length()> X.EXTERNAL_USER_MAXLENGTH){
    throw new BusinessException("The group name does not conform to specification");
}