Java Regex中的matchs()和find()有什么区别?
该java.util.regex.Matcher中的类代表一个引擎,进行各种匹配操作。此类没有构造函数,可以使用matches()类java.util.regex.Pattern的方法创建/获取此类的对象。
两个匹配()和发现()的Matcher类的尝试方法来根据输入串中的正则表达式找到匹配。如果匹配,则两个都返回true,如果找不到匹配,则两个方法都返回false。
主要区别在于该matches()方法尝试匹配给定输入的整个区域,即,如果您尝试在一行中搜索数字,则仅当输入在该区域的所有行中都有数字时,此方法才返回true。
例1
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String regex = "(.*)(\\d+)(.*)";
String input = "This is a sample Text, 1234, with numbers in between. "
+ "\n This is the second line in the text "
+ "\n This is third line in the text";
//创建一个模式对象
Pattern pattern = Pattern.compile(regex);
//创建一个Matcher对象
Matcher matcher = pattern.matcher(input);
if(matcher.matches()) {
System.out.println("找到匹配项");
} else {
System.out.println("找不到匹配项");
}
}
}输出结果
找不到匹配项
而该find()方法尝试查找与模式匹配的下一个子字符串,即,如果在该区域中找到至少一个匹配项,则此方法返回true。
如果请看以下示例,则我们尝试将特定行与中间的数字匹配。
例2
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String regex = "(.*)(\\d+)(.*)";
String input = "This is a sample Text, 1234, with numbers in between. "
+ "\n This is the second line in the text "
+ "\n This is third line in the text";
//创建一个模式对象
Pattern pattern = Pattern.compile(regex);
//创建一个Matcher对象
Matcher matcher = pattern.matcher(input);
//System.out.println("当前范围: "+input.substring(regStart, regEnd));
if(matcher.find()) {
System.out.println("找到匹配项");
} else {
System.out.println("找不到匹配项");
}
}
}输出结果
找到匹配项