以下代码:
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.replaceAll
或String.replaceFirst
也不这样做呢?这不一致吗?
答案 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没有添加任何^和$来强制完整的字符串匹配。