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

时间:2012-01-19 09:02:41

标签: java regex

我有一小段代码

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

打算打印

dkoe

但它没有打印!!

9 个答案:

答案 0 :(得分:277)

欢迎使用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()

答案 1 :(得分:34)

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

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

答案 2 :(得分:18)

String.matches返回整个字符串是否与正则表达式匹配,而不仅仅是任何子字符串。

答案 3 :(得分:16)

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

这与perl正则表达式不同,它试图找到匹配的部分

如果要查找只包含小写字符的字符串,请使用模式[a-z]+

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

答案 4 :(得分:8)

用于

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

答案 5 :(得分:4)

我曾遇到过同样的问题:

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

以上失败了!

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

上述内容适用于()内的模式。

答案 6 :(得分:1)

您的正则表达式[a-z]dkoe不匹配,因为它只匹配长度为1的字符串。请使用[a-z]+之类的内容。

答案 7 :(得分:-1)

您必须在模式中至少放置一个捕获()才能匹配,并像这样纠正模式:

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

答案 8 :(得分:-3)

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

Pattern p = Pattern.compile("[a-z]+", Pattern.CASE_INSENSITIVE);