網址對應的 RE2 規格

本頁說明在網址對應中的規則運算式使用 RE2 語法的相關規定和限制。

RE2 內建下列限制:

  • RE2 不支援任意的預先或回溯斷言,也不支援反向參照。具體來說,系統不支援下列反向參照運算子:
    • (?=) - 正向先行
    • (?!) - 負向先行
    • (?<=) - 正向後顧
    • (?<!) - 負向後顧
    • \N - 反向參照,其中 N 為整數
  • RE2 無法將 \cx 辨識為 Control-X 字元。
  • RE2 無法識別原子分組運算子 (?>...)++
  • RE2 無法辨識 \C\G\X
  • RE2 無法辨識條件式子模式 (?(...)...)、註解 (?#...)、模式參照 (?R) (?1) (?P>foo) 或 C 附註 (?C...)

除了前述 RE2 限制外,我們還會使用下列允許清單,進一步限制規則運算式語法:

  • 允許使用單一字元運算子
  • 群組只能有子字串比對運算子
  • 群組只能包含不重複的項目
  • 字元重複只能出現在單一規則運算式中,且必須符合下列條件:
  • 範圍只能包含下列項目:

空字串和空字串的類似項目

運算子 說明
^ 文字或行的開頭 (m=true)
$ 在文字 (例如 \z,而非 \Z) 或行 (m=true) 結尾
\A 文字開頭
\b 在 ASCII 字詞界線 (一側為 \w,另一側為 \W、\A 或 \z)
\B 不在 ASCII 字詞邊界
\g 位於要搜尋的子文字開頭
\G 在上一場比賽結束時
\z 文字結尾

重複次數

運算子 說明
x* 零或多個 x,建議多個
x+ 一或多個 x,偏好更多
x? 零或一個 x,建議一個
x{n,m} N 或 n+1 或 ... 或 m x,建議選擇較多
x{n,} N 個以上 x,越多越好
x{n} 確切 n 倍
x*? 零或多個 x,偏好較少
x+? 一或多個 x,偏好較少
x?? 零或一個 x,偏好零
x{n,m}? N 或 n+1 或 ... 或 m x,建議較少
x{n,}? N 個以上 x,建議較少
x{n}? 確切 n x

Submatch

運算子 說明
(re) 編號擷取群組 (子比對)
(?P<name>re) 已命名和編號的擷取群組 (子比對)
(?<name>re) 已命名和編號的擷取群組 (子比對)
(?:re) 非擷取群組
(?flags) 在目前群組中設定旗標;非擷取群組
(?flags:re) 在 re 中設定旗標;非擷取

範圍

運算子 說明
[] 範圍
\d 數字 (≡ [0-9])
\D 非數字 (≡ [^0-9])
\s 空白字元 (≡ [\t\n\f\r ])
\S 非空白字元 (≡ [^\t\n\f\r ])
\w 文字字元 (≡ [0-9A-Za-z_])
\W 非文字字元 (≡ [^0-9A-Za-z_])
[[:alnum:]] 英數字元 (≡ [0-9A-Za-z])
[[:alpha:]] 字母 (≡ [A-Za-z])
[[:ascii:]] ASCII (≡ [\x00-\x7F])
[[:blank:]] 空白 (≡ [\t ])
[[:cntrl:]] 控制 (≡ [\x00-\x1F\x7F])
[[:digit:]] 數字 (≡ [0-9])
[[:lower:]] 小寫 (≡ [a-z])
[[:space:]] 空白字元 (≡ [\t\n\v\f\r ])
[[:upper:]] 大寫 (≡ [A-Z])
[[:word:]] 文字字元 (≡ [0-9A-Za-z_])
[[:xdigit:]] 十六進位數字 (≡ [0-9A-Fa-f])

範圍中允許的字元

字元範圍 說明
0-9, A-Z, a-z 英數字元
\x00-\x7F ASCII
0-9A-Fa-f 十六進位數字
\t\n\v\f\r 空白字元
^ 範圍否定
!"#$%&'()*+,\-.:;<=>?@[\\\]^_`{|}~ 其他角色