在Java中,可以通過(guò)在正則表達(dá)式中使用?
來(lái)實(shí)現(xiàn)非貪婪匹配。在正則表達(dá)式中,?
可以與*
、+
、?
和{}
等限定符一起使用,使其變?yōu)榉秦澙菲ヅ洹?/p>
例如,假設(shè)我們有一個(gè)字符串input
,想要匹配最短的以a
開(kāi)頭、以b
結(jié)尾的子字符串。我們可以使用.*?
來(lái)實(shí)現(xiàn)非貪婪匹配,即用.*?ab
來(lái)匹配最短的子字符串。
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
進(jìn)行非貪婪匹配,最終匹配到的是aab
,而不是整個(gè)字符串aabab
。