我对这个例子有点困惑......我不明白这个String模式中写的是什么。另外,find
是什么?我是从TutorialsPoint学习的。
拜托,有人可以帮我理解吗?
代码:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches {
public static void main(String args[]) {
// String to be scanned to find the pattern.
String line = "This order was placed for QT3000! OK?";
String pattern = "(.*)(\\d+)(.*)";
// Create a Pattern object
Pattern r = Pattern.compile(pattern);
// Now create matcher object.
Matcher m = r.matcher(line);
if (m.find()) {
System.out.println("Found value: " + m.group(0));
System.out.println("Found value: " + m.group(1));
System.out.println("Found value: " + m.group(2));
} else {
System.out.println("NO MATCH");
}
}
}
输出:
找到价值:此订单是为QT3000下达的! OK?
找到价值:此订单是为QT300配的 发现价值:0
答案 0 :(得分:2)
该模式有3个捕获组
(.*)
表示零个或多个任何字符(捕获组1)(\\d+)
表示一个或多个数字(捕获组2)(.*)
表示零个或多个任何字符(捕获组3)调用find()
时#34;尝试查找与模式匹配的输入序列的下一个子序列。" (Matcher.Find())
当你拨打以下电话时:
System.out.println("Found value: " + m.group(0));
System.out.println("Found value: " + m.group(1));
System.out.println("Found value: " + m.group(2));
m.group(0)
表示正则表达式评估的整个String m.group(1)
指捕获第1组(任何角色的零个或多个)m.group(2)
指捕获第2组(一个或多个数字)您会看到m.group(1)
返回This order was placed for QT300
,而m.group(2)
留下了最后一个零,因为捕获组2必须至少有一位数。
如果要将捕获组3(m.group(3)
)添加到输出中,它将在m.group(2)
的最后一个零之后显示剩余的字符串。
换句话说:
System.out.println("Found value: " + m.group(0));
System.out.println("Found value: " + m.group(1));
System.out.println("Found value: " + m.group(2));
System.out.println("Found value: " + m.group(3));
会显示:
Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0
Found value: ! OK?
希望这有帮助!
答案 1 :(得分:1)
find()
将找到与模式匹配的输入序列的下一个子序列。当且仅当输入序列的子序列与此匹配器的模式匹配时,返回true
。
你的正则表达式有3组:
(.*)
是第1组,(\\d+)
是第2组,(.*)
是第3组。
第1组匹配前面标记的0或更多,除了换行符之外的任何字符。
第2组与前面的标记中的1个或多个匹配任何数字字符(0-9)。
第3组与第1组相同。
所以当你打电话时:
m.group(0)
将返回整个String。
m.group(1)
将返回第1组。
m.group(2)
将返回第2组。
传递给组的参数是正则表达式中组的索引。