0

我有

String b = "aasf/sdf/dfd/*";
Pattern.matches("[^ ]", b);

我一直在 Patter.matches(); 中返回 false;

由于它匹配正则表达式,除了空格字符之外的所有字符,它不应该返回true吗?

4

4 回答 4

1

Pattern.matches会尝试完全匹配模式..

所以true只有当你有一个空格字符作为输入时它才会返回。

就像使用\A[^ ]\z

哪里\A是输入的开始,是输入\z的结束..


如果要检查不包含空格的字符串,可以使用

input.matches("[^ ]*");
于 2013-09-21T16:23:48.460 回答
1

不,因为您尝试将整个字符串与非空格字符匹配。

String b = "aasf/sdf/dfd/*";
Pattern.matches("[^ ]*", b);

这个将返回 true

于 2013-09-21T16:24:32.603 回答
1

正如 anirudh 建议的那样,模式匹配器的使用方式不同(请参阅其他答案的示例),我相信您尝试做的是以下内容:

    String b = "aasf/sdf/dfd/*";
    System.out.println("b.matches(\"[^ ]\") = " + b.matches("[^ ]"));

输出

b.matches("[^ ]") = false
于 2013-09-21T16:32:21.403 回答
0

Pattern.matches()true仅当整个字符串与正则表达式匹配时才返回。您要做的是查看该模式是否出现在String. 你需要使用Matcher.find()它。

例如,

    String testStr = "aasf/sdf/dfd/*";
    Pattern patt = Pattern.compile("[^ ]");
    Matcher m = patt.matcher(testStr);
    while (m.find()) {
        System.out.println(m.group(0));
    }

这将打印所有匹配项。如果您只需要知道是否找到模式,只需检查 if m.find()is true

于 2013-09-21T16:23:53.100 回答