正規表示式

2021-09-22 08:28:21 字數 2711 閱讀 6149

正規表示式

分類bre

基本正規表示式,grep sed vi等軟體支援.vim由擴充套件

ere擴充套件正規表示式,egrep (grep-e) sed -r等

pcre

幾乎所有好幾語言都是pcre的方言或者變種.python從1.6開始使用sre正規表示式殷勤,可以認為是pcre的子集,見模組re

基本語法

元字元 metacharacter

元字元說明

.匹配除換行符外任意乙個字元

[abc]

字符集和,只能表示乙個字元位置.匹配所包含的任意乙個字元

[^abc]

字符集和,只能表示乙個字元位置.匹配除集合包含的任意乙個字元

[a-z]

字元範圍,也是個集合,表示乙個字元位置,匹配所包含的任意乙個字元

[^a-z]

字元範圍,表示乙個字元位置,匹配除去集合內字元的任意乙個字元

\b匹配單詞的邊界

\b不匹配單詞的邊界

\d等價於[0-9]匹配一位數字

\d等價於[^0-9]匹配一位非數字

\s匹配1位空白字元,包括換行符 製表符 空格 [\f\r\n\v]

\s匹配一位非空白字元 [^\f\r\n\v]

\w匹配一位包括下劃線和中文的任何單詞字元,類似於[a-za-z0-9_]

\w匹配任何非單詞字元,等價於[^a-za-z0-9_]

重複元字元說明*

表示前面正規表示式會重複0次或多次

+表示前面的正規表示式重複至少1次

?表示前面的正規表示式會重複0次或1次

重複固定的n次

重複至少n次

重複n到m次

元字元說明舉例

x|y匹配x或者y

wood took foot food 使用w|food或者(w|f)ood

捕獲使用小括號指定乙個子表示式,也叫分組,捕獲後會自動分配組好從1開始,可以改變優先順序

\數字匹配對應的分組

(very)\1very very,但捕獲的組group是very

(?:pattern)

如果僅僅為了改變優先順序,就不需要捕獲分組

(?:w|f)ood

(?exp)(?'name』exp)

命名分組捕獲,但是可以通過name訪問分組,python語法必須是(?pexp)

零寬斷言

(?=exp)

零寬度正**先行斷言,斷言exp一定在匹配的右邊出現,也就是說斷言後面一定跟個exp

f(?=oo)f後面一定有oo出現

(?<=exp)

零寬度正回顧後發斷言,斷言exp一定出現在匹配的左邊,前面一定有個exp字首

(?<=f)ood (?<=t>)ook分別匹配ood ook,ook前一定有t出現

負向零寬斷言

(?!exp)

零寬度負**先行斷言,斷言exp一定不會出現在右側,也就是說斷言後面一定不是exp

\d(?!\d)匹配3位數字,斷言3位數字後面一定不是數字,foo(?!d)foo後面一定不是d

(?零寬度負回顧後發斷言,斷言exp一定不能出現在左側,也就是說斷言前面一定不能是exp

(?(?#comment)

注釋f(?=oo)(?#這個後斷言不捕獲)

分組和捕獲是同乙個意思

使用正規表示式時,能用簡單表示式,就不要複雜的表示式

貪婪與非貪婪

預設是貪婪模式,就是盡量多匹配更長的字串

非貪婪,在重複的符號後面加上乙個?問號,就盡量少的匹配了

**說明

*?匹配任意次,但盡可能少重複

+?匹配至少1次,但盡可能少重複

??匹配0次或1次,但盡可能少重複

?匹配至少n次,但盡可能少重複

?匹配至少n次,至多m次,盡可能少重複

引擎選項

**說明

python

lgnorecase

匹配時忽略大小寫

re.l re.ignorecase

singleline

單行模式,可以匹配所有字元,包括\n

re.s re.dotall

multiline

多行模式^行首 $行尾

re.m re.multiline

ignorepatternwhitespace

忽略表示式中的空白字元,如果要使用空白字元用轉義,#可以用來做注釋

re.x re.verbose

單行模式:

. 可以匹配所有字元,包括換行符

^ 表示整個字串的開頭,$整個字串的結尾

多行模式:

. 可以匹配除了換行符之外的字元,多行不影響.點

^ 表示行首,$行尾,這裡是每乙個行

預設模式:可以看做匹配的文字是一行,不能看做多行, .點號不能匹配換行符,^和$表示行首和行尾,而行首行尾就是整個字串的開頭和結尾

單行模式:基本和預設模式一樣,只是.點號終於可以匹配任意乙個字元包括換行符,這是所有文字就是乙個長長的只有一行的字串.^就是這一行字串的行首,$就是這一行的行尾.

多行模式:重新定義了行的概念,但不影響.點號的行為,^和$還是行首行尾的意思,只不過因為多行模式可以識別換行符了."開始"指的是\n前的字元,注意最後一行結尾可以沒有\n

簡單講,單行模式只影響.點號行為,多行模式重新定義行影響了^和$

注意:字串中看不見的換行符,\r\n會影響e$的測試,e$只能匹配e\n

正規表示式 正規表示式 總結

非負整數 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正規表示式 編寫正規表示式

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