記錄 精通正規式表達式 相關的心得與筆記

詮釋字元 名稱 匹配內容
. 句點 任何一個字元
[…] 字元類別(character class) 任何一個列出的字元
[^…] 反轉字元類別 任何一個沒有列出的字元
^ 脫字號 行首位置
$ 錢號 行尾位置
or、或、bar 匹配由它分隔的任一表達式
() 括號 限制 | 範圍
\< word boundary 單字開頭位置 (單詞邊界、metasequences、詮釋序列)
\> word boundary 單字結束位置 (單詞邊界、metasequences、詮釋序列)

特殊情境解釋:

  • 字元類別 狀況,要確認 使用的詮釋字元 在 字元類別 內是否有意義。

  • 字元類別只能在目標字串內匹配單一字元。

- 情境
    a[a-z] 字元類別內:有意義,表示範圍
    a[-az] 字元類別內:無意義,因未放置在範圍間,僅會當成 - 號

| 情境
    a[a|b] 字元類別內:無意義,僅代表 | 號。

量詞重複詮釋字元

詮釋字元 至少需要 最多嘗試 意義
? 1 允許一個;不必要(一個可省略)
* 不限 允許無限個;不必要(任何數量皆可))
+ 1 不限 允許無限個;必要一個(至少一個))

其他

詮釋字元 說明
\w 表示 [a-zA-Z0-9_]
\d 表示 [0-9]
\s 匹配 空白字元 (空白、Tab、換行、換頁)
| 匹配它分隔的左右兩個表達式之一
{下限, 上限} 至少需要下限,最多允許上限
(…) 限制選項範圍、為量詞提供群組、捕捉參考
\1, \2 參考,匹配先前某組,括號之內匹配的內容
(?:…) 匹配,但不捕捉
(?<name>…) 給匹配對象群組設定 名稱

旁觀比對

旁觀比對,會檢查子表達式是否匹配,但不會取用任何匹配文字。只會找到文字內可以匹配的位置。 目標為基準的左或右邊。

詮釋字元 說明
(?=…) lookahead (往右旁觀比對),往前看 右邊必須是
(?!…) lookahead 不可為 …
(?<=…) lookbehind (往左旁觀比對),往後看 左邊必須是
(?<!…) lookbehind 不可為 …
(?<=www\.)xxx(?=\.net)

// 我要找 xxx
// 它的左邊必須是 wwww\.
// 它的右邊必須是 \.net

www.xxx.net

RegExp 應用: lookahead , lookbehind - 無聊技術研究