2013-09-21 61 views
0

模式匹配的方法返回false

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

在Patter.matches我不断收到返回false();

因为它匹配正则表达式,所有字符旁边的空格字符,不应该返回true吗?

回答

1

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

那么它将返回true只有当你有一个非空格字符作为输入。

它就像使用\A[^ ]\z

其中\A输入的开头和\z输入端..


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

input.matches("[^ ]*"); 
+0

@JungJooç编辑 – Anirudha

+0

哦,傻我,我刚刚通过一本书 – JungJoo

+0

@JungJoo看到[this](http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern。 html)。它具有java支持的所有不同模式...看看'^','$','\ A','\ z'和他们的区别 – Anirudha

0

Pattern.matches()返回true只有当整个字符串匹配re GEX。你想要做的是看看模式是否出现在String的任何地方。你需要使用Matcher.find()

e.g,

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

这将打印的所有比赛。如果您只需要知道是否找到了某种模式,请检查m.find()是否为true

1

不,你试着匹配整个字符串到非空字符。

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

这一次将返回true

+0

哦,我认为它是比较整个字符串为一个字符。我想它与字符串中的每个字符进行比较。 – JungJoo

+0

几乎可以肯定他想要一个'+'而不是'*',是吗? –

+0

可能。但对他的情况无关紧要 – Archer

1

由于anirudh建议,模式匹配器的用法不同(例如参见其他答案),我相信,你所要做的是以下几点:

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

输出

b.matches("[^ ]") = false