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