在Java中,可以通过在正则表达式中使用?
来实现非贪婪匹配。在正则表达式中,?
可以与*
、+
、?
和{}
等限定符一起使用,使其变为非贪婪匹配。
例如,假设我们有一个字符串input
,想要匹配最短的以a
开头、以b
结尾的子字符串。我们可以使用.*?
来实现非贪婪匹配,即用.*?ab
来匹配最短的子字符串。
import java.util.regex.*;
public class Main {
public static void main(String[] args) {
String input = "aabab";
Pattern pattern = Pattern.compile(".*?ab");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
System.out.println("Non-greedy match: " + matcher.group());
}
}
}
在上面的示例中,使用.*?ab
进行非贪婪匹配,最终匹配到的是aab
,而不是整个字符串aabab
。