?涉及到贪婪模式 当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。
.*?为贪婪匹配,表示匹配尽量多的任意字符。
.*为懒惰匹配,表示匹配尽量少的任意字符。
例:
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