?涉及到贪婪模式 当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。
.*?为贪婪匹配,表示匹配尽量多的任意字符。
.*为懒惰匹配,表示匹配尽量少的任意字符。
例:
public static void main(String[] args) {
String regex1 = "a.*?t";
String regex2 = "a.*t";
String input = "abstract";
System.out.println(RegexUtil.getList(input, regex1, 0));
System.out.println(RegexUtil.getList(input, regex2, 0));
}结果:
[abst, act]
[abstract]
RegexUtil:
package com.common.regex;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
public class RegexUtil {
private RegexUtil() {}
public static List<String> getList(String dealStr, String regexStr, int n) {
List<String> list = new ArrayList<>();
if (StringUtils.isEmpty(dealStr) || StringUtils.isEmpty(regexStr) || n < 0) {
return list;
}
Pattern pattern = Pattern.compile(regexStr, Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
Matcher matcher = pattern.matcher(dealStr);
while (matcher.find()) {
list.add(matcher.group(n));
}
return list;
}
}
参考:https://blog.youkuaiyun.com/qq_16504067/article/details/53579813
本文介绍了正则表达式中的贪婪模式与懒惰模式的区别,通过具体的Java代码示例展示了这两种模式如何影响字符串的匹配结果。
2033

被折叠的 条评论
为什么被折叠?



