之前做程序的時候看到過正則表達式的貪婪與非貪婪模式,今天用的時候就想不起來了,現在這里總結一下,以備自己以后用到注意。
1.什么是正則表達式的貪婪與非貪婪匹配
如:String str="abcaxc";
Patter p="ab.*c";
貪婪匹配:正則表達式一般趨向於最大長度匹配,也就是所謂的貪婪匹配。如上面使用模式p匹配字符串str,結果就是匹配到:abcaxc(ab.*c)。
非貪婪匹配:就是匹配到結果就好,最少的匹配字符。如上面使用模式p匹配字符串str,結果就是匹配到:abc(ab.*?c)。
2、編程中如何區分兩種模式
默認是貪婪模式;在量詞后面直接加上一個問號?就是非貪婪模式。
下面的都是量詞:
{m,n}:m到n個
*:任意多個
+:一個到多個
?:0或一個
貪婪匹配:在滿足匹配時,匹配盡可能長的字符串,默認情況下,采用貪婪匹配
非貪婪匹配:在滿足匹配時,匹配盡可能短的字符串,使用?來表示非貪婪匹配
*? 重復任意次,但盡可能少重復 +? 重復1次或更多次,但盡可能少重復 ?? 重復0次或1次,但盡可能少重復 {n,m}? 重復n到m次,但盡可能少重復 {n,}? 重復n次以上,但盡可能少重復
正則表達式規則查看如下教程:
http://www.runoob.com/regexp/regexp-syntax.html