正規表示式
貪婪與懶惰
當正規表示式中包含能接受重複的限定符時,通常的行為是(在使整個表示式能得到匹配的前提下)匹配盡可能多的字元。考慮這個表示式:a.*b
,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配。
有時,我們更需要懶惰匹配,也就是匹配盡可能少的字元。前面給出的限定符都可以被轉化為懶惰匹配模式,只要在它後面加上乙個問號?。這樣.*?就意味著匹配任意數量的重複,但是在能使整個匹配成功的前提下使用最少的重複。現在看看懶惰版的例子吧:
a.*?b
匹配最短的,以a開始,以b結束的字串。如果把它應用於aabab的話,它會匹配aab(第一到第三個字元)和ab(第四到第五個字元)。
為什麼第乙個匹配是aab(第一到第三個字元)而不是ab(第二到第三個字元)?
簡單地說,因為正規表示式有另一條規則,比懶惰/貪婪規則的優先順序更高:最先開始的匹配擁有最高的優先權——the match that begins earliest wins。
表5.懶惰限定符
**/語法 說明
*?
重複任意次,但盡可能少重複
+?
重複1次或更多次,但盡可能少重複
??
重複0次或1次,但盡可能少重複
?
重複n到m次,但盡可能少重複
?
重複n次以上,但盡可能少重複
not signed i
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
正規表示式速記理解技巧
四個字元是所有語言都支援的正規表示式,所以這個四個是基礎的正規表示式。正則難理解因為裡面有乙個等價的概念,這個概念大大增加了理解難度,讓很多初學者看起來會蒙,如果把等價都恢復成原始寫法,自己書寫正則就超級簡單了,就像說話一樣去寫你的正則了 等價 d,w 都是等價字元 等價於匹配長度 等價於匹配長度 ...