關於正規表示式的基礎知識,推薦正規表示式30分鐘入門教程。
以下僅對某些特性做些總結:(紅色字型表示正規表示式;
黑色字型標源字串;下劃線部分表示匹配;如果有連續的多個匹配用綠色加下劃線表示
)1 貪婪模式(預設)
當正規表示式中包含能接受重複的限定符時,通常的行為是(在使整個表示式能得到匹配的前提下)匹配盡可能多的字元。
(?:<(\w+)>).*()
hello
在前後兩個括號裡的內容可以匹配的前提下,『.*』會盡可能多的匹配,所以上面的源字串整體會被匹配到。
加上斷言可以只匹配外層標籤內的內容,通過這種方式迭代可以取出標籤內的文字:
(?<=<(\w+)>).*(?=<\/\1>)
hello
2 懶惰模式
在表示重複的限定符後面加『?』可以切換到懶惰模式,即在可以匹配的情況下盡可能少的匹配。
示例:
a.*b
aabab
3 優先順序
如果按照懶惰模式的定義,懶惰模式部分的示例應該匹配到兩個『ab』。但是正則中有個規則比懶惰/貪婪規則的優先順序更高:最先開始的匹配擁有最高的優先權——the match that begins earliest wins。
用python**解釋下:
s = 'aabab
'ret =
start =none
for index, char in
enumerate(s):
if start is
none:
if char == 'a'
: start =index
else
:
if char == 'b'
: start =none
print(ret)
4 或和python中的邏輯或『or』相同,正規表示式中的或也是短路操作,只要匹配到就會返回,忽略後面的選項。
示例:匹配0-255之間的任意數字(可以有前導0):
[01]?\d\d?|2[0-4]\d|25[0-5]101
187249
256# 匹配到的所有數字:1、01、187、24、9、25、6
這個正規表示式有三個分支,匹配的數字範圍依次是:0-199, 200-249, 250-255。第乙個條件其實可以匹配任意數字,因為任意大於200的數字都可以拆分成一位數和兩位數的組合。
可以交換下選項的位置,改進版:
2[0-4]\d|25[0-5]|[01]?\d\d?101
187249
256當然上面的版本也還是不滿足需求,我們可以通過新增邊界條件來控制,合適的邊界條件會消除短路的影響。這裡只是為了說明『|』的短路規則。
5 單行模式和多行模式
正規表示式中幾個元字元的含義:
單行模式:. 可以匹配任意字元,包括換行符('\n')
多行模式:
單行模式和多行模式可可以同時啟用,它們改變的是不同元字元的行為。
參考:[1] 正規表示式30分鐘入門教程
正規表示式 正規表示式 總結
非負整數 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...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...