java string.matches需要太多字符串的匹配

时间:2013-12-04 10:47:23

标签: java regex string

以下代码:

String s = "casdfsad";
System.out.println(s.matches("[a-z]"));
System.out.println(s.matches("^[a-z]"));
System.out.println(s.matches("^[a-z].*"));

输出

false
false
true

但为什么呢?我没有在任何模式的末尾指定任何$String.matches是否隐式添加^$以强制完整字符串匹配? 为什么?我可以通过使用其他方法禁用完整的字符串匹配吗?

编辑:

如果String.matches隐式添加^$,为什么String.replaceAllString.replaceFirst也不这样做呢?这不一致吗?

3 个答案:

答案 0 :(得分:2)

不幸的是,find中没有String方法,您必须使用Matcher.find()

Pattern pattern = Pattern.compile("[a-z]");
Matcher matcher = pattern.matcher("casdfsad");
System.out.println(matcher.find());

将输出

true

编辑:如果您想查找完整字符串而不需要正则表达式,可以使用String.indexOf(),例如

String someString = "Hello World";
boolean isHelloContained = someString.indexOf("Hello") > -1;
System.out.println(isHelloContained);

someString = "Some other string";
isHelloContained = someString.indexOf("Hello") > -1;
System.out.println(isHelloContained);

将输出

true
false

答案 1 :(得分:1)

尝试通过添加贪婪量词的+,您可以匹配整个String。因为,s有多个字符。所以,为了匹配你应该选择一个匹配的量词,超过一个a-z范围的字符。对于String.matches,您不需要边界字符^$

String s = "casdfsad";
System.out.println(s.matches("[a-z]+"));// It will be true

答案 2 :(得分:0)

您是否尝试将单个字符正则表达式用于Sring?

你可以尝试:

String s = "casdfsad";
System.out.println(s.matches("[a-z]+"));
System.out.println(s.matches("^[a-z]+"));
System.out.println(s.matches("^[a-z].*"));

第三个因为*而匹配。 String.matches没有添加任何^和$来强制完​​整的字符串匹配。