正規表示式

2022-08-23 08:21:15 字數 3958 閱讀 4213

# 正規表示式基礎知識

# #

# #

# #   使用正規表示式時,能用簡單表示式,就不要用複雜的表示式。因為越複雜的正規表示式效率反而不高且易讀性極差。

# #

# # 一.概述

# #

#   正規表示式,regular

# expression,縮寫為regex、regexp、re等。 正規表示式是文字處理極為重要的技術,用它可以對字串按照某種規則進行檢索、替換。

# thompson將正規表示式引入到unix中文字編輯器ed和grep命令中,由此正規表示式普

# 及開來。

# # 二.分類

# #

# bre

#   基本正規表示式,grep、sed、vi等軟體支援。vim有擴充套件。

# # ere

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

# # pcre

#   幾乎所有高階語言都是pcre的方言或者變種。python從1

# .6

# 開始使用sre正規表示式引擎,可以認為是pcre

# 的子集,見模組re。

# #

# 三.基本語法

# # 1 >.元字元(metacharacter)

# #

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

# # [abc]

#   字元集合,只能表示乙個字元位置。匹配除去集合內字元的任意乙個字元。

# # [ ^ abc]

#   字元集合,只能表示乙個字元位置。匹配除去集合內字元的任意乙個字元。

# # [a - z]

#   字元範圍,也是集合,表示乙個字元位置匹配所包含的字元。類似的還有[a - z], [0 - 9]。

# # [ ^ a - z]

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

# # \b

#   匹配單詞的邊界。

# # \b

#   不匹配單詞的邊界。

# # \d

#   [0 - 9]

# 匹配1位數字。

# # \d

#   [ ^ 0 - 9]匹配1位數字。

# # \s

#   匹配1位空白字元,包括換行符, 製表符,空格。例如:[\f\r\n\t\v]

# # \s

#   匹配1位非空白字元。

# # \w

#   匹配[a - za - z0 - 9

# _], 包括中文的字。

# # \w

#   匹配\w之外的字元。

# # 2 >.轉義

# # 凡是在正規表示式中有特殊意義的符號,如果想使用它的本意,請使用\轉義。 反斜槓自身,得使用\ \

# \

# \r、\n還是轉義後代表回車、換行

# 3 >.重複

# #

# *#   表示前面的正規表示式會重複0次或多次。

# # +

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

# # ?

#   表示前面的正規表示式會重複出現0次活1次。

# #

#   重複固定的n次。

# #

#   重複至少n次。  

# #

#   重複n到m次。

# # 4 >.或

# # x | y

#   匹配x或者y。

# 5 >.捕獲

# #

# (pattern)

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

# # \數字

#   匹配對應的分組。

# # (?:pattern)

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

# # (? < name > exp)

# 或(?'name'

# exp)

#   命名分組捕獲,但是可以通過name訪問分組。python的re標準庫愈發必須是(?p < name > exp)。

# # 6 >.零寬斷言

# # (?=exp)

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

# # (? <= exp)

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

# 7 >.負向零寬斷言

# # (?!exp)

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

# # (? < !exp)

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

# 8 >.注釋

# # (? # comment)

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

# 9 >.貪婪與非貪婪(預設就是貪婪模式,也就是說盡量多匹配匹配更長的字串。)

# #

# *?

#   匹配任意次,但盡量可能少重複。

# # +?

#   匹配自少一次,但盡可能少重複。

# # ??

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

# # ?

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

# # ?

#   匹配至少n次,至多m次,但盡可能少重複。

# # 10 >.引擎選項

# #

# ignorecase

#   匹配時忽略大小寫。

# # singleline

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

#   需要注意的是,在單行模式中,"."

# 可以匹配所有字元,包括換行符。"^"

# 表示整個字串的開頭,「$」整個字串的結尾。

#   

# multiline

#   多行模式, ^ 行首,$行尾。

#   需要注意的是,在多行模式中,"."

# 可以匹配除了換行符之外的字元,多行不影響「.」點號。"^"

# 表示行首,「¥」表示行尾,只不過這裡的行是每一行。  

# # ignorepatternwhitespace

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

# # 11 >.單行模式和多行模式注意事項

# #

# 單行模式:

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

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

# # 多行模式:

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

#    ^ 表示行首,$行尾,只不過這裡的行是每乙個行

# # 預設模式:

#   可以看做待匹配的文字是一行,不能看做多行,.點號不能匹配換行符, ^ 和$表示行首和行尾,而行首行尾就

# 是整個字串的開頭和結尾

# # 單行模式:

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

# 一行的字串。 ^ 就是這一行字串的行首,$就是這一行的行尾。

# # 多行模式:

#   重新定義了行的概念,但不影響.點號的行為, ^ 和$還是行首行尾的意思,只不過因為多行模式可以識別換行

# 符了。"開始"

# 指的是\n後緊接著下乙個字元;

# "結束"

# 指的是\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正規表示式 編寫正規表示式

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