正規表示式

2022-08-24 02:15:09 字數 1674 閱讀 5425

關於正規表示式的基礎知識,推薦正規表示式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正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...