匹配模式 pattern

  1. 單一字元控制符號:
    符號 描述 實例 匹配字串
    ^ 行首 ^word word
    $ 行尾 word$ word
    . 任意字元 (換行字元除外) c.t cat cbt cct
    [...] 中括號中所列的字元 [abc] a b c
    [^...] 中括號中所列的字元外的所有字元 [^abc] d e
  2. 數量控制符號:必須要跟前一字元一起看,此表以 re 代表前一字元。
    符號 描述 實例 匹配字串
    re* 匹配 0 或多次前一個字元 xyz* xy xyz xyzzz
    re+ 匹配 1 或多次前一個字元 xyz+ xyz xyzzz
    re? 匹配 0 或 1 次前一個字 xyz? xy xyz
    re{n} 匹配剛好 n 次前一個字元 xy{3}z xyyyz
    re{n,} 匹配 n 次(含)以上前一個字元 xy{2,}z xyyz xyyyyz
    re{n,m} 匹配最少 n 次最多 m 次前一個字元 xy{2,3}z xyyz xyyyz
  3. 預定義控制符號:以 "\" 接一字元代表一群字元,可用於 [...] 字元集中。
    符號 描述 實例 匹配字串
    \d 數字 0 到 9,同 [0-9] x\dz x1z x5z
    \D 非數字,同 [^\d] x\Dz xyz xAz
    \s 空白字元,同 [ \t\r\n\f\v] x\sz x z
    \S 非空白字元,同 [^\s] x\Sz xBz
    \w 數字與英文字母,同 [a-zA-Z0-9] x\wz x3z xBz
    \W 非數字與英文字母,同 [^a-zA-Z0-9] x\wz x#z
    \A 僅匹配字串開頭,不同於 ^ 是每行行首 \Axyz xyz
    \Z 僅匹配字串結尾,不同於 $ 是每行行尾 xyz\Z xyz
    \b 匹配 \w\W 之間,尋找字串邊界 \bxyz\b xyz! xyz
    \B [^\b,尋找非字串邊界 \Bxyz\B AxyzH xyz
  4. 邏輯、分組控制符號:
    符號 描述 實例 匹配字串
    abc|xyz | 左右兩邊任意匹配一個 abc|xyz abc xyz
    (...) 小括號內為一組,每遇到一個左括號編號 +1,可透過 re 模組的 group 函式取得匹配字串,或 \num 引用。 (xyz){2} xyzxyz
    \num 引用編號為 num 的匹配字串 (\d)xyz\1 1xyz1 3xyz3
    (?P<name>..) 同上的分組,但除了原編號外,再指定額外別名 (?P<id>xyz){2} xyzxyz
    (?P=name) 引用別名為 name 的匹配字串 (?P<id>\d)xyz(?P=id) 1xyz1 3xyz3
  5. 特殊控制符號:此時 (..) 不是做分組。
    符號 描述 實例 匹配字串
    (?:..) (..) 不做分組編號 (?:xyz){2} xyzxyz
    (?ilmsux) ilmsux 每個字元代表一個匹配模式,只能用在正規表示式開頭,可複選,於選項 flag 中介紹 (?i)xyz xyz Xyz
    (?#..) # 後的內容為註解 xy(?#abc)z? xyz
    (?=..) 接於字元後的匹配模式,但匹配時不印匹配模式。 xy(?=\d) xy3 xy
    (?!..) 接於字元後的不匹配模式,但匹配時不印匹配模式。 xy(?!\d) xyz xy
    (?<=..) 接於字元前的匹配模式,但匹配時不印匹配模式。 (?<=\d)xy 3xy xy
    (?<!..) 接於字元前的不匹配模式,但匹配時不印匹配模式。 (?<!\d)xy zxy xy
    (?(id/name) yes-pattern|no-pattern) 如果編號為 id 或別名為 name 的分組匹配,使用 yes-pattern,否則使用 no-pattern ((\d)xyz(?(1)\d|\D) 1xyz3 xyzB

  DYWANG_HOME