正则表达式函数
更新时间:2026-07-24
本页收录正则表达式函数,涵盖匹配计数、匹配判断、匹配提取与替换。正则语法为 Rust regex crate 方言。
Rust regex 不支持模式中的反向引用(如 \1)和前瞻、后顾断言(如 (?=…)、(?<=…)),从 PCRE、Java、Python 等直接搬用这些语法会导致正则编译报错。注意 regexp_replace 的替换串中的 \1 是捕获组引用,属于支持范围。
| 函数 | 别名 | 说明 |
|---|---|---|
regexp_count |
— | 返回正则表达式在字符串中的匹配次数 |
regexp_like |
— | 判断正则表达式在字符串中是否至少有一次匹配 |
regexp_match |
— | 返回首次匹配的各捕获组组成的数组 |
regexp_replace |
— | 替换字符串中匹配正则表达式的子串 |
regexp_count
返回正则表达式在字符串中的匹配次数。
语法:regexp_count(str, regexp[, start, flags])
参数:
- str:要处理的字符串表达式。可以是常量、列或函数,以及任意运算符的组合。
- regexp:要使用的正则表达式。可以是常量、列或函数,以及任意运算符的组合。
- start:可选的正则搜索起始位置(第一个位置为 1)。可以是常量、列或函数。
-
flags:可选的正则表达式标志,用于控制正则表达式的行为。支持以下标志:
- i:忽略大小写:字母同时匹配大写和小写形式
- m:多行模式:^ 和 $ 匹配行的开头/结尾
- s:允许 . 匹配 \n
- R:启用 CRLF 模式:启用多行模式时,使用 \r\n
- U:交换 x 与 x? 的含义
示例:
SQL
1> SELECT regexp_count('abcAbAbc', 'abc', 2, 'i');
2+---------------------------------------------------------------+
3| regexp_count(Utf8("abcAbAbc"),Utf8("abc"),Int64(2),Utf8("i")) |
4+---------------------------------------------------------------+
5| 1 |
6+---------------------------------------------------------------+
regexp_like
若正则表达式在字符串中至少有一次匹配,返回 true,否则返回 false。
语法:regexp_like(str, regexp[, flags])
参数:
- str:要处理的字符串表达式。可以是常量、列或函数,以及任意运算符的组合。
- regexp:要使用的正则表达式。可以是常量、列或函数,以及任意运算符的组合。
-
flags:可选的正则表达式标志,用于控制正则表达式的行为。支持以下标志:
- i:忽略大小写:字母同时匹配大写和小写形式
- m:多行模式:^ 和 $ 匹配行的开头/结尾
- s:允许 . 匹配 \n
- R:启用 CRLF 模式:启用多行模式时,使用 \r\n
- U:交换 x 与 x? 的含义
示例:
SQL
1> SELECT regexp_like('Köln', '[a-zA-Z]ö[a-zA-Z]{2}');
2+--------------------------------------------------------+
3| regexp_like(Utf8("Köln"),Utf8("[a-zA-Z]ö[a-zA-Z]{2}")) |
4+--------------------------------------------------------+
5| true |
6+--------------------------------------------------------+
7> SELECT regexp_like('aBc', '(b|d)', 'i');
8+--------------------------------------------------+
9| regexp_like(Utf8("aBc"),Utf8("(b|d)"),Utf8("i")) |
10+--------------------------------------------------+
11| true |
12+--------------------------------------------------+
regexp_match
返回正则表达式在字符串中首次匹配的各捕获组组成的数组(无捕获组时返回整段匹配)。
语法:regexp_match(str, regexp[, flags])
参数:
- str:要处理的字符串表达式。可以是常量、列或函数,以及任意运算符的组合。
- regexp:用于匹配的正则表达式。可以是常量、列或函数。
-
flags:可选的正则表达式标志,用于控制正则表达式的行为。支持以下标志:
- i:忽略大小写:字母同时匹配大写和小写形式
- m:多行模式:^ 和 $ 匹配行的开头/结尾
- s:允许 . 匹配 \n
- R:启用 CRLF 模式:启用多行模式时,使用 \r\n
- U:交换 x 与 x? 的含义
示例:
SQL
1> SELECT regexp_match('Köln', '[a-zA-Z]ö[a-zA-Z]{2}');
2+---------------------------------------------------------+
3| regexp_match(Utf8("Köln"),Utf8("[a-zA-Z]ö[a-zA-Z]{2}")) |
4+---------------------------------------------------------+
5| [Köln] |
6+---------------------------------------------------------+
7> SELECT regexp_match('aBc', '(b|d)', 'i');
8+---------------------------------------------------+
9| regexp_match(Utf8("aBc"),Utf8("(b|d)"),Utf8("i")) |
10+---------------------------------------------------+
11| [B] |
12+---------------------------------------------------+
regexp_replace
替换字符串中匹配正则表达式的子串。
语法:regexp_replace(str, regexp, replacement[, flags])
参数:
- str:要处理的字符串表达式。可以是常量、列或函数,以及任意运算符的组合。
- regexp:用于匹配的正则表达式。可以是常量、列或函数。
- replacement:用于替换的字符串表达式。可以是常量、列或函数,以及任意运算符的组合。
-
flags:可选的正则表达式标志,用于控制正则表达式的行为。支持以下标志:
- g:(global)全局搜索,不在第一次匹配后停止
- i:忽略大小写:字母同时匹配大写和小写形式
- m:多行模式:^ 和 $ 匹配行的开头/结尾
- s:允许 . 匹配 \n
- R:启用 CRLF 模式:启用多行模式时,使用 \r\n
- U:交换 x 与 x? 的含义
示例:
SQL
1> SELECT regexp_replace('foobarbaz', 'b(..)', 'X\\1Y', 'g');
2+------------------------------------------------------------------------+
3| regexp_replace(Utf8("foobarbaz"),Utf8("b(..)"),Utf8("X\1Y"),Utf8("g")) |
4+------------------------------------------------------------------------+
5| fooXarYXazY |
6+------------------------------------------------------------------------+
7> SELECT regexp_replace('aBc', '(b|d)', 'Ab\\1a', 'i');
8+-------------------------------------------------------------------+
9| regexp_replace(Utf8("aBc"),Utf8("(b|d)"),Utf8("Ab\1a"),Utf8("i")) |
10+-------------------------------------------------------------------+
11| aAbBac |
12+-------------------------------------------------------------------+
评价此篇文章
