2013年11月25日 星期一

regular expression

正規表示式、字串樣本、字串比對

正規表示式是一種進階的字串比對,用「符號」描述字串的樣式,說明某個位置可以是哪些字元、符合的次數等。只要了解這些特殊「符號」,英文稱 metacharacter,可翻作「字元符」,就可以了解正規表示式。正規表示式在許多地方都可以見到,例如 grepsed、vi、JavaScript、git grep、IMS PSI 等。

字元描述

大部分字元,包括英文字母及數字,代表的就是它自己。其它的是有特殊意義的符號,可描述字元、位置、次數等。
  • .:任何字元。
  • \:跳脫字元,跳脫下個字元原本的解釋,原本是 metacharacter,就不解釋為 metacharacter。原本不是 metacharacter,改解釋為 metacharacter。
  • \d:數字。
  • \D:非數字,和 \d 相反。
  • \s:
  • \S:
  • []: bracket 表示式,[] 包起來,內含比對單一字元符合的列表。但如果內容以 ^ 開頭,則為不包含的列表。
    • 可用「-」表示範圍。例如「a-d」相當於「abcd」(在有些 locale 的字典順序不同,會變成「aBbCcDd」)。
    • 列表中也可以包含特定事先定義的類別,包括 [:alnum:], [:alpha:], [:blank:], [:cntrl:], [:digit:], [:graph:],[:lower:], [:print:], [:punct:], [:space:], [:upper:], 和 [:xdigit:]。注意,這裡的 [] 是類別名稱的一部分,[[:alnum:]] 代表數字及英文字母。
    • 大多 metacharacter 在 [] 裡失去其原本的特殊意義。要解除 ] 特殊意義,可放在列表第一個,^ 就不要放在第一個,- 放在最後。
  • \w:底線、數字或英文字母,相當於 [_[:alnum:]]。
  • \W:和 \w 相反,相當於 [^_[:alnum:]]。

位置描述

代表位置
  • ^:行開頭
  • $:行結尾
  • \< 及 \>
  • \b
  • \B

次數描述

說明重複的次數,沒有的話就是一次。
  • { }:重複次數。{2} 表重複兩次,{2,5} 表重複 2 至 5 次,{2,} 表兩次以上
  • *:0 次以上,相當於 {0,}。
  • +:1 次以上,相當於 {1,}。
  • ?:0 次或 1 次,相當於 {0,1}。

Alternation

|

subexpression

()

返回參考

\n:n 是一位數字,代表前面第 n 個 subexpression 符合的子字串。

BRE 和 ERE

一開始的正規表示式只支援 [、]、.、^、$、*,稱為 BRE (Basic Regular Expressions)。後來 POSIX 的 BRE 新增字元符來擴充功能,但為了相容,這些字元符前面需要加反斜線跳脫。而 POSIX ERE 則相反。
ERE:chapter 9 in IEEE 1003.1-2004 Part 1

BREPOSIX BRE
ERE
基本字元符支援支援支援
跳脫基本字元符反斜線反斜線反斜線
擴充字元符一般字元反斜線跳脫支援
跳脫擴充字元符支援反斜線

PCRE (Perl-compatible Regular Expressions)

  • 凡是標點符號, 加上倒斜線, 一定沒有特殊意義。
  • 常用的 [...] 定義了簡寫:
    • \d:[0-9], "任何一個數字"
    • \D:[^0-9], "任何一個非數字"
    • \w:[a-zA-Z0-9_], "任何一個文數字",不同 locale 有所不同。
    • \W:[^a-zA-Z0-9_], "任何一個非文數字"
    • \s:[ \t\n], "任何一個空白類字元"
    • \S:[^ \t\n], "任何一個非空白類字元"
  • ...

參考

  1. https://www.cyut.edu.tw/~ckhung/b/re/
  2. http://blog.roodo.com/rocksaying/archives/2670695.html
  3. Shell Script 文章

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...