正则表达式在 String.match ()中不工作

我有一小段代码

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

应该打印出来

dkoe

但是什么也没印出来! !

227928 次浏览

[a-z]匹配 a 和 z 之间的一个 单身字符。因此,例如,如果你的字符串只是 "d",那么它就会匹配并被打印出来。

您需要将正则表达式更改为 [a-z]+以匹配一个或多个字符。

正则表达式 [a-z]不匹配 dkoe,因为它只匹配长度为1的字符串。

欢迎使用 Java 的错误命名的 .matches()方法... 它尝试并匹配所有的输入

如果你想知道正则表达式是否匹配输入文本,使用 PatternMatcher和匹配器的 .find()方法:

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

如果您确实需要查看输入是否只有小写字母,那么您可以使用 .matches(),但是您需要匹配一个或多个字符: 将 +附加到您的字符类中,如 [a-z]+中所示。或者使用 ^[a-z]+$.find()

Java 的正则表达式实现尝试匹配整个字符串

它不同于 perl 正则表达式,后者试图找到匹配的部分

如果希望查找只有小写字符的字符串,请使用模式 [a-z]+

如果要查找包含至少一个小写字符的字符串,请使用模式 .*[a-z].*

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);
}
}