我有一小段代码
String[] words = {"{apf","hum_","dkoe","12f"}; for(String s:words) { if(s.matches("[a-z]")) { System.out.println(s); } }
应该打印出来
dkoe
但是什么也没印出来! !
[a-z]匹配 a 和 z 之间的一个 单身字符。因此,例如,如果你的字符串只是 "d",那么它就会匹配并被打印出来。
[a-z]
"d"
您需要将正则表达式更改为 [a-z]+以匹配一个或多个字符。
[a-z]+
正则表达式 [a-z]不匹配 dkoe,因为它只匹配长度为1的字符串。
欢迎使用 Java 的错误命名的 .matches()方法... 它尝试并匹配所有的输入
.matches()
如果你想知道正则表达式是否匹配输入文本,使用 Pattern、 Matcher和匹配器的 .find()方法:
Pattern
Matcher
.find()
Pattern p = Pattern.compile("[a-z]"); Matcher m = p.matcher(inputstring); if (m.find()) // match
如果您确实需要查看输入是否只有小写字母,那么您可以使用 .matches(),但是您需要匹配一个或多个字符: 将 +附加到您的字符类中,如 [a-z]+中所示。或者使用 ^[a-z]+$和 .find()。
+
^[a-z]+$
Java 的正则表达式实现尝试匹配整个字符串
它不同于 perl 正则表达式,后者试图找到匹配的部分
如果希望查找只有小写字符的字符串,请使用模式 [a-z]+
如果要查找包含至少一个小写字符的字符串,请使用模式 .*[a-z].*
.*[a-z].*
String.matches返回 完整字符串是否匹配正则表达式,而不是任何子字符串。
String.matches
二手货
String[] words = {"{apf","hum_","dkoe","12f"}; for(String s:words) { if(s.matches("[a-z]+")) { System.out.println(s); } }
您可以通过以下方法使您的模式大小写不敏感:
Pattern p = Pattern.compile("[a-z]+", Pattern.CASE_INSENSITIVE);
我曾经面临过同样的问题:
Pattern ptr = Pattern.compile("^[a-zA-Z][\\']?[a-zA-Z\\s]+$");
以上都失败了!
Pattern ptr = Pattern.compile("(^[a-zA-Z][\\']?[a-zA-Z\\s]+$)");
以上工作与模式内的 (和 )。
(
)
您必须在模式中至少放置一个捕获 ()来匹配,并且像下面这样纠正模式:
()
String[] words = {"{apf","hum_","dkoe","12f"}; for(String s:words) { if(s.matches("(^[a-z]+$)")) { System.out.println(s); } }