搜索正则表达式模式以查找“禁止”字符

时间:2013-07-02 11:52:22

标签: java regex newline regex-negation

我已经搜索了很多内容,但我找不到任何解决方案。 对于学校项目,我需要在字符串中找到不受支持的字符不受支持的字符。 允许为[A-Z\s]

我发现Pattern.match()仅检查整个字符串是否与模式匹配。 所以我尝试了这种模式:.*[^A-Z\\s].*

只要您在字符串中没有任何换行符,它就会起作用。为了检查它们,我也使用[.\\s]*[^A-Z\\s][.\\s]*来处理它们,但现在没有任何工作了。

为此目的,正确的正则表达式是什么?

2 个答案:

答案 0 :(得分:5)

或者:

  • 只是反转比赛,
  • 或反转字符类并尝试仅查找一个字符:

[绕过SO bug - 不能在列表项后面引用代码]

final Pattern p = Pattern.compile("[^A-Z\\s]");
if (p.matcher(input).find())
    // illegal input, bark

是的,.matches()被错误命名... Java中的真正正则表达式匹配是使用.find()完成的。

答案 1 :(得分:0)

尝试"(?s).*[^A-Z\\s].*"它会打开dotall模式。在dotall模式下,表达式.匹配任何字符,包括行终止符。默认情况下,此表达式与行终止符不匹配。请参阅Pattern.API for(?idmsuxU-idmsuxU)