公司网站建设费如何出账,中国能建平台,榆林做网站电话,做网站前端用什么软件在正则表达式中#xff0c;#xff1f;既可以表示数量#xff0c;0次或1次#xff0c;等效于 {0#xff0c;1}#xff0c;也可以跟在其它数量限定符之后#xff0c;表示非贪心匹配#xff0c;即匹配时匹配搜索到的尽可能短的字符串。
下面来看一个例子#xff1a;
T…在正则表达式中既可以表示数量0次或1次等效于 {01}也可以跟在其它数量限定符之后表示非贪心匹配即匹配时匹配搜索到的尽可能短的字符串。
下面来看一个例子
Test
public void test() {Pattern pattern Pattern.compile(a.*?);Matcher matcher pattern.matcher(abcabc);if (matcher.matches()) {System.out.println(matcher.group());}
}
执行后输出abcabc
不是最短匹配吗为什么失灵了
这其实牵涉到非贪心匹配的规则非贪心匹配到下一个规则前匹配最短路径如果没有下一个规则按贪心匹配处理。
也就是说如果只出现 a.*? 还是按贪心匹配处理。
下面来看正确的使用
Test
public void test() {Pattern pattern Pattern.compile((a.*?)(.*));Matcher matcher pattern.matcher(afcafc);if (matcher.matches()) {System.out.println(matcher.group(0));System.out.println(matcher.group(1));System.out.println(matcher.group(2));}
}
执行后输出
afcafc
a
fcafc
可以看到第一个捕获组捕获到了最短的字符串 a第二个捕获组捕获到了 fcafc。
下面再来看看另外两种情况
(a.*)(.*) 第一个捕获组会捕获所有第二个不会报错但什么也捕获不到(a.*?)(.*?) 第一个捕获组会捕获 a第二个捕获组会捕获 fcafc因为后面没有其它规则了按贪心匹配处理。