Regex 比對器 (proto)

type.matcher.v3.RegexMatcher

[type.matcher.v3.RegexMatcher proto]

一種 regex 比對器,設計用於在處理不受信任的輸入時確保安全性。

{
  "google_re2": {...},
  "regex": ...
}
google_re2

(type.matcher.v3.RegexMatcher.GoogleRE2) Google 的 RE2 regex 引擎。

regex

(字串必要) regex 比對字串。該字串必須受設定的引擎支援。regex 會比對整個字串,而非部分比對。

type.matcher.v3.RegexMatcher.GoogleRE2

[type.matcher.v3.RegexMatcher.GoogleRE2 proto]

Google 的 RE2 regex 引擎。regex 字串必須符合文件中記錄的 語法。該引擎設計為在線性時間內完成執行,並限制使用的記憶體量。

Envoy 透過執行階段支援程式大小檢查。執行階段金鑰 re2.max_program_size.error_levelre2.max_program_size.warn_level 可以設定為整數,作為編譯的 regex 可以具有的最大程式大小或複雜度,超出此值將會分別拋出例外或記錄警告。re2.max_program_size.error_level 預設為 100,而如果未設定 re2.max_program_size.warn_level,則沒有預設值 (不會檢查/記錄警告)。

Envoy 會發出兩個統計資料來追蹤 regex 的程式大小:直方圖 re2.program_size,記錄程式大小,以及計數器 re2.exceeded_warn_level,每次程式大小超過警告層級閾值時,該計數器就會遞增。

{
  "max_program_size": {...}
}
max_program_size

(UInt32Value) 此欄位控制 RE2「程式大小」,這是對編譯的 regex 評估複雜度的粗略估計。程式大小大於設定值的 regex 將無法編譯。在這種情況下,可以增加設定的最大程式大小,或簡化 regex。如果未指定,則預設值為 100。

此欄位已棄用;正規表示式驗證應在管理伺服器上執行,而不是由每個個別用戶端執行。

注意

雖然此欄位已棄用,但程式大小仍會根據全域 re2.max_program_size.error_level 執行階段值進行檢查。

type.matcher.v3.RegexMatchAndSubstitute

[type.matcher.v3.RegexMatchAndSubstitute proto]

描述如何比對字串,然後使用正規表示式和取代字串產生新字串。

{
  "pattern": {...},
  "substitution": ...
}
pattern

(type.matcher.v3.RegexMatcher必要) 用於尋找字串 (以下稱為「主體字串」) 中應取代部分的正規表示式。當在取代作業期間產生新字串時,新字串最初與主體字串相同,但主體字串中的所有相符項都會被取代字串取代。如果不需要取代所有相符項,可以使用正規表示式錨點來確保單一相符項,以便僅取代一個模式的發生。可以在模式中使用擷取群組來擷取主體字串的部分,然後在取代字串中參考。

substitution

(字串) 在取代作業期間,應取代到主體字串相符部分的字串,以產生新字串。可以在取代字串中參考模式中的擷取群組。但請注意,參考擷取群組的語法是由選擇的正規表示式引擎定義的。Google 的 RE2 正規表示式引擎使用反斜線後接擷取群組編號來表示編號的擷取群組。例如,\1 表示擷取群組 1,而 \2 表示擷取群組 2。