1

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

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

只要字符串中没有任何换行符,它就可以工作。为了检查它们,我曾经[.\\s]*[^A-Z\\s][.\\s]*也处理过它们,但现在没有任何效果了。

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

4

2 回答 2

5

任何一个:

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

[绕过 SO 错误 - 无法在列表项之后立即引用代码]

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

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

于 2013-07-02T11:55:39.500 回答
0

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

于 2013-07-02T12:05:11.163 回答