正規表示式函數¶
所有正規表示式函數都使用 Java 模式語法,但有一些值得注意的例外
當使用多行模式(透過
(?m)
旗標啟用)時,只有\n
會被識別為行終止符。此外,不支援(?d)
旗標,且不得使用。不區分大小寫比對(透過
(?i)
旗標啟用)始終以 Unicode 感知方式執行。但是,不支援上下文敏感和本地敏感的比對。此外,不支援(?u)
旗標,且不得使用。不支援替代對。例如,
\uD800\uDC00
不會被視為U+10000
,必須指定為\x{10000}
。對於沒有基本字元的非間隔符號,邊界 (
\b
) 的處理方式不正確。字元類別中不支援
\Q
和\E
(例如[A-Z123]
),而是被視為字面值。支援 Unicode 字元類別 (
\p{prop}
),但有以下差異必須移除名稱中的所有底線。例如,使用
OldItalic
而不是Old_Italic
。腳本必須直接指定,不帶
Is
、script=
或sc=
前綴。範例:\p{Hiragana}
區塊必須使用
In
前綴指定。不支援block=
和blk=
前綴。範例:\p{Mongolian}
類別必須直接指定,不帶
Is
、general_category=
或gc=
前綴。範例:\p{L}
二進位屬性必須直接指定,不帶
Is
。範例:\p{NoncharacterCodePoint}
- regexp_extract_all(string, pattern) -> array(varchar)¶
傳回
string
中正規表示式pattern
比對的子字串。SELECT regexp_extract_all('1a 2b 14m', '\d+'); -- [1, 2, 14]
- regexp_extract_all(string, pattern, group) -> array(varchar)¶
在
string
中尋找正規表示式pattern
的所有出現次數,並傳回 擷取群組編號group
。SELECT regexp_extract_all('1a 2b 14m', '(\d+)([a-z]+)', 2); -- ['a', 'b', 'm']
- regexp_extract(string, pattern) -> varchar()¶
傳回
string
中正規表示式pattern
比對的第一個子字串。SELECT regexp_extract('1a 2b 14m', '\d+'); -- 1
- regexp_extract(string, pattern, group) -> varchar()¶
在
string
中尋找正規表示式pattern
的第一個出現次數,並傳回 擷取群組編號group
。SELECT regexp_extract('1a 2b 14m', '(\d+)([a-z]+)', 2); -- 'a'
- regexp_like(string, pattern) -> boolean()¶
評估正規表示式
pattern
,並判斷它是否包含在string
中。此函數類似於
LIKE
運算子,不同之處在於模式只需要包含在string
中,而不需要比對整個string
。換句話說,此函數執行的是包含運算,而不是比對運算。您可以使用^
和$
來錨定模式,以比對整個字串。SELECT regexp_like('1a 2b 14m', '\d+b'); -- true
- regexp_replace(string, pattern) -> varchar()¶
從
string
中移除正規表示式pattern
比對的每個子字串執行個體。SELECT regexp_replace('1a 2b 14m', '\d+[ab] '); -- '14m'
- regexp_replace(string, pattern, replacement) -> varchar()¶
將
string
中正規表示式pattern
比對的每個子字串執行個體替換為replacement
。擷取群組可以使用編號群組的$g
或具名群組的${name}
在replacement
中引用。美元符號 ($
) 可以透過使用反斜線 (\$
) 逸出來包含在替換中。SELECT regexp_replace('1a 2b 14m', '(\d+)([ab]) ', '3c$2 '); -- '3ca 3cb 14m'
- regexp_replace(string, pattern, function) -> varchar()¶
使用
function
,替換string
中所有與正規表達式pattern
匹配的子字串。 對於每次匹配,將調用 lambda 運算式function
,並將捕獲群組 作為陣列傳遞。 捕獲群組編號從一開始;沒有針對整個匹配的群組(如果需要,請用括號將整個表達式括起來)。SELECT regexp_replace('new york', '(\w)(\w*)', x -> upper(x[1]) || lower(x[2])); --'New York'
- regexp_split(string, pattern) -> array(varchar)¶
使用正規表達式
pattern
分割string
並返回一個陣列。 保留尾隨的空字串。SELECT regexp_split('1a 2b 14m', '\s*[a-z]+\s*'); -- [1, 2, 14, ]