我已经使用了很多它,但我找不到任何解决方案。 对于学校项目,我需要在字符串中找到不受支持的字符不支持的字符。 允许是[A-Z\s]
。搜索正则表达式模式来查找“禁止”字符
我发现Pattern.match()
只检查整个字符串是否匹配模式。 所以我试过这种模式:.*[^A-Z\\s].*
只要你没有在字符串中有任何换行符,它就会工作。为了检查它们,我也使用了[.\\s]*[^A-Z\\s][.\\s]*
来处理它们,但现在没有任何工作了。
这将是什么正确的正则表达式?
我已经使用了很多它,但我找不到任何解决方案。 对于学校项目,我需要在字符串中找到不受支持的字符不支持的字符。 允许是[A-Z\s]
。搜索正则表达式模式来查找“禁止”字符
我发现Pattern.match()
只检查整个字符串是否匹配模式。 所以我试过这种模式:.*[^A-Z\\s].*
只要你没有在字符串中有任何换行符,它就会工作。为了检查它们,我也使用了[.\\s]*[^A-Z\\s][.\\s]*
来处理它们,但现在没有任何工作了。
这将是什么正确的正则表达式?
或者:
[四处SO缺陷 - 无法引用
final Pattern p = Pattern.compile("[^A-Z\\s]");
if (p.matcher(input).find())
// illegal input, bark
是,.matches()
是名不副实的代码之后列表项] ...真正的正则表达式米在Java中使用.find()
来完成。
尝试"(?s).*[^A-Z\\s].*"
它打开dotall模式。在dotall模式下,表达式.
匹配任何字符,包括行结束符。默认情况下,该表达式不匹配行结束符。请参阅Pattern.API(?idmsuxU-idmsuxU)
+1对于您的解决方案,但我不同意“真正的Java正则表达式匹配使用'find()'部分完成,这些只是两种不同的方法Matcher。'matches'试图匹配'模式'对整个输入的匹配,'find'试图在输入内匹配它。语义... – Mena
m)谢谢你的作品。为什么我没有提出这个想法?感谢.find()我用你的第一个建议。'if(!Pattern.matches(“[AZ \\ s] *”,inputstr))' – s3lph
@Mena no,不是语义,35年以上的正则表达式。和Java是两种主流的正则表达式语言,拒绝承认“正则表达式匹配”的意思。见证这个错误的人困惑的人数 – fge