正则expression式在String.matches()中不起作用

我有这一小段代码

String[] words = {"{apf","hum_","dkoe","12f"}; for(String s:words) { if(s.matches("[az]")) { System.out.println(s); } } 

应该打印

 dkoe 

但它没有打印!

欢迎来到Java错误的.matches()方法…它会尝试并匹配所有的input。 不幸的是,其他语言也纷纷效仿

如果您想查看正则expression式是否匹配input文本,请使用MatcherPatternMatcher.find()方法:

 Pattern p = Pattern.compile("[az]"); Matcher m = p.matcher(inputstring); if (m.find()) // match 

如果你想知道input是否只有小写字母,你可以使用.matches() ,但是你需要匹配一个或多个字符:在你的字符类中附加一个+ ,如[az]+ 。 或者使用^[az]+$.find()

[az]匹配a和z之间的单个字符。 所以,如果你的string只是"d" ,例如,那么它将匹配并被打印出来。

您需要将您的正则expression式更改为[az]+以匹配一个或多个字符。

java的正则expression式的实现尝试匹配整个string

这不同于perl正则expression式,它试图find匹配的部分

如果要查找除小写字符以外的string,请使用模式[az]+

如果要查找包含至less一个小写字符的string,请使用该模式.*[az].*

String.matches返回整个string是否匹配正则expression式,而不是任何子string。

用过的

 String[] words = {"{apf","hum_","dkoe","12f"}; for(String s:words) { if(s.matches("[az]+")) { System.out.println(s); } } 

我曾经遇到同样的问题:

 Pattern ptr = Pattern.compile("^[a-zA-Z][\\']?[a-zA-Z\\s]+$"); 

以上失败!

 Pattern ptr = Pattern.compile("(^[a-zA-Z][\\']?[a-zA-Z\\s]+$)"); 

以上()内的模式工作。

您的正则expression式[az]dkoe不匹配,因为它只匹配长度为1的string。使用类似[az]+string。

您可以通过执行以下操作来使模式不区分大小写:

 Pattern p = Pattern.compile("[az]+", Pattern.CASE_INSENSITIVE);