if("test%$@*)$(%".matches("[^a-zA-Z\\.]"))
System.exit(0);
if("te/st.txt".matches("[^a-zA-Z\\.]"))
System.exit(0);
即使正则表达式应该返回true,程序也不会退出。代码有什么问题?
答案 0 :(得分:7)
matches
才会返回true
。在您的情况下,您的正则表达式仅代表一个字符,而不是a-z
,A-Z
或.
。
我怀疑您要检查字符串是否包含您在regex中描述的这些特殊字符之一。在这种情况下,用.*
围绕你的正则表达式让正则表达式匹配整个字符串。哦,你不必在角色类.
内逃避[.]
。
if ("test%$@*)$(%".matches(".*[^a-zA-Z.].*")) {
//string contains character that is not in rage a-z, A-Z, or '.'
答案 1 :(得分:6)
x.matches(y)
相当于
Pattern.compile(y).matcher(x).matches()
并要求整个字符串x
与正则表达式y
匹配。如果您只是想知道x
的某些子字符串是否匹配y
,那么您需要使用find()
代替matches()
:< / p>
if(Pattern.compile("[^a-zA-Z.]").matcher("test%$@*)$(%").find())
System.exit(0);
或者你可以改变测试的意义:
if(!"test%$@*)$(%".matches("[a-zA-Z.]*"))
通过提供与允许的字符串匹配的模式而不是不匹配的字符,然后查看测试字符串是否失败以匹配此模式。
答案 2 :(得分:0)
您始终获取false,因为matches()
方法仅在模式与完整字符串匹配时才返回true。