Java使用正则匹配捕捉1 Pattern p = Pattern.compile("name="sign" value="(.*)"/>");2 Pattern p = Pattern.compile("name="sign" value=*"(.?)**"/>");第二个比第一个多了一个?号,请问其中区别是什么
小伙看你根骨奇佳,潜力无限,来学PHP伐。
貪婪和非貪婪的區別。
簡單來說,非貪婪是匹配到就停,不管後面還有沒有,貪婪是只要後面還符合,就不會停。
當正規表示式中包含能接受重複的限定符時,通常的行為是(在使整個表達式能得到匹配的前提下)匹配盡可能多的字元。以這個表達式為例:a.*b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配。 有時,我們更需要懶惰匹配,也就是匹配盡可能少的字符。前面給的限定符都可以轉換成懶惰匹配模式,只要在它後面加上一個問號?。這樣.*?就意味著匹配任意數量的重複,但是在能使整個匹配成功的前提下使用最少的重複。現在就來看看懶惰版的例子:a.*?b符合最短的,以a開始,以b結束的字串。如果把它應用於aabab的話,它會匹配aab(第一到第三個字元)和ab(第四到第五個字元)。
複製自:http://deerchao.net/tutorials... 正規表示式30分鐘入門,貪婪與懶惰部分
前者在找到一個匹配之後就會停止,而後者會找到所有匹配的目標。
這個問題涉及正規表達式中貪婪模式與懶惰模式(也稱為非貪婪模式)首先來看看這兩個的定義
貪婪模式,最大限度匹配*,+,'{n,}',.*都屬於貪婪模式,所謂最大限度匹配,我舉個例子
*
+
.*
var pattern = /a.*e/ console.log("abcd fsdfsdfsesfdfsdfsesdfedfsdfses".match(pattern)); //结果为abcd fsdfsdfsesfdfsdfsesdfedfsdfse
懶惰模式,在匹配成功的前提下,盡可能少的去匹配。 還是上面這個例子:
var pattern = /a.*?e/ console.log("abcd fsdfsdfsesfdfsdfsesdfedfsdfses".match(pattern)); //结果为abcd fsdfsdfse
?會選取最小的匹配的。
貪婪和非貪婪的區別。
簡單來說,非貪婪是匹配到就停,不管後面還有沒有,貪婪是只要後面還符合,就不會停。
當正規表示式中包含能接受重複的限定符時,通常的行為是(在使整個表達式能得到匹配的前提下)匹配盡可能多的字元。以這個表達式為例:a.*b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配。
有時,我們更需要懶惰匹配,也就是匹配盡可能少的字符。前面給的限定符都可以轉換成懶惰匹配模式,只要在它後面加上一個問號?。這樣.*?就意味著匹配任意數量的重複,但是在能使整個匹配成功的前提下使用最少的重複。現在就來看看懶惰版的例子:
a.*?b符合最短的,以a開始,以b結束的字串。如果把它應用於aabab的話,它會匹配aab(第一到第三個字元)和ab(第四到第五個字元)。
複製自:http://deerchao.net/tutorials... 正規表示式30分鐘入門,貪婪與懶惰部分
前者在找到一個匹配之後就會停止,而後者會找到所有匹配的目標。
這個問題涉及正規表達式中貪婪模式與懶惰模式(也稱為非貪婪模式)
首先來看看這兩個的定義
貪婪模式,最大限度匹配
*
,+
,'{n,}',.*
都屬於貪婪模式,所謂最大限度匹配,我舉個例子懶惰模式,在匹配成功的前提下,盡可能少的去匹配。
還是上面這個例子:
?會選取最小的匹配的。