我理解Java正则表达式可以从String
的{{1}}便捷方法访问,或者走很长的路线并制作matches
等等。所以,下面的代码应该是真打印2“是的!”到输出的行。打印出“是的!”线和“不”线。我错过了什么?
Pattern
输出:
import java.util.regex.*;
public class TestRegex {
public static void main(String[] args) {
String pattern = "html";
String input = "somehtml.txt";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(input);
if(m.find()) {
System.out.println("Yes!");
}
else {
System.out.println("no");
}
if(input.matches(pattern)) {
System.out.println("Yes!");
}
else {
System.out.println("no");
}
}
}
Win7 64位上的Java版本1.6。
C:\ Users \ Michael Smith> java -version java版“1.6.0_24” Java(TM)SE运行时环境(版本1.6.0_24-b07) Java HotSpot(TM)64位服务器VM(版本19.1-b02,混合模式)
答案 0 :(得分:5)
matches()
检查与正则表达式匹配的整个字符串。 find()
只在字符串中的某处查找匹配项。
答案 1 :(得分:2)
String#Matches方法根据整个输入文本检查模式。这就是您的代码第二次打印no
的原因。 Matcher#Find扫描输入以查找下一个匹配项
输入中的子序列。