ere
pcre **
說明舉例
.匹配除換行符外任意乙個字元
.[abc]
字元集合,只能表示乙個字元位置。 匹配所包含的任意乙個字元
[abc]匹配plain中的』a』
[^abc]
字元集合,只能表示乙個字元位置 匹配除去集合內字元的任意乙個字元
[^abc]可以匹配plain中的』p』,『l』,『i』或者』n』
[a-z]
字元範圍,也是個集合,表示乙個字元位置 匹配所包含的任意乙個字元
常用[a-z],[0-9]
[^a-z]
字元範圍,也是個集合,表示乙個字元位置 匹配出去集合內字元的任意乙個字元
\b匹配單詞的邊界
\bb在文字中找到單詞中b開頭的b字元
\b不匹配單詞的邊界
t\b包含t的單詞但是不以t結尾的t字元,例如write \bb不以b開頭的含有b的單詞,例如able
\d[0-9]匹配1位數字
\d\d
[^0-9]匹配一位非數字
\s匹配1位空白字元,包括換行符、製表符、空格 [\f\r\n\t\v]
\s匹配1位非空白字元
\w匹配[a-za-z0-9_],包括中文的字
\w\w
匹配\w之外的字元
轉義
凡是在正規表示式中有特殊意義的符號,如果想使用它的本意,請使用\轉義。
反斜槓自身,得使用\\
\r、\n還是轉義後代表回車、換行
重複**
說明舉例
*表示前面的正規表示式會重複0次或多次
e\w*單詞中e後面可以有非空白字元
+表示前面的正規表示式重複至少1次
e\w+單詞中e後面至少有乙個非空白字元
?表示前面的正規表示式會重複0次或1次
e\w?單詞中e後面至多有乙個非空白字元
重複固定的n次
e\w單詞中e後面只能由乙個非空白字元
重複至少n次
e\w等價e\w+
w\w等價e\w*
e\w等價e\w?
重複n到m次
e\w單詞中e後面至少1個,至多10個非空白字元
練習:1、匹配手機號碼
字串為』手機號碼13246546466『
2、匹配中國座機
字串為』號碼025-23214235、0543-423543536。『
1、\d
2、\d-\d或**
說明舉例
x|y匹配x或者y
wood took foot food
使用w | food 或者(w|f)food
捕獲**
說明舉例
(pattern)
使用小括號指定乙個子表示式,也叫分組
捕獲後會自動分配組號從1開始
可以改變優先順序
\數字匹配對應的分組
(very)\1匹配very very,但捕獲的組group是very
(?:pattern)
如果僅僅為了改變優先順序,就不需要捕獲分組
(?:w|f)ood
'industr(?:y|ies)『等價』industry|industries』
(?exp
(?'name』exp))
命名分組捕獲,但是可以通過name訪問分組
python語法必須是(?exp)
測試字串為wood took foot food
**說明
舉例(?=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次,但盡可能少重複
*y和v.
*?y
引擎選項
**說明
舉例ignorecase
匹配時忽略大小寫
re.l
re.ignorecase
singleline
單行模式。可以匹配所有字元,包括\n
re.s
re.ditall
multiline
多行模式^行首、$行尾
re.m
re.multiline
ignorepatternwhitespace
忽略表示式中的空白字元,如果喲啊使用空白字元用轉義,#可以用來做注釋
re.x
re.verbose
單行模式:
.可以匹配所有字元,包括換行符
^表示整個字串的開頭,$整個字串的結尾
多行模式:
.可以匹配除了換行符之外的字元,多行不影響.
^表示行首,$行尾,只不過這裡的行是每一行
預設模式:可以看作待匹配的文字是一行,不能看作多行,.不能匹配換行符,^和$表示行首和行尾,而行首行尾就是整個字串的開頭和結尾
單行模式:基本和預設模式一樣,只是.終於可以匹配任意乙個字元包括換行符,這時所有文字就是乙個長長的只有一行的字串。^就是這一行字串的行首,$就是這一行的行尾。
多行模式:
重新定義了行的概念,但不影響.的行為,^和還是行首行尾的意思,只不過因為多行模式可以識別換行符了。'開始'指的是\n後緊接著下乙個字元;'結束'指的是\n前的字元,注意最後一行結尾可以沒有\n。
簡單講,單行模式只影響.行為,多行模式重新定義行影響了^和$。
注意:注意字串中看不見的換行符,\r\n會影響e$的測試,e$只能匹配e\n
舉例
harry key
.$指的是此行的結尾,而預設模式和單行模式都是一行,指的是這個大字串的最後乙個字元,就是key的y。
正規表示式 正規表示式 總結
非負整數 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正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...