正则表达式函数

最近更新时间:2026-05-06 16:28:13

我的收藏
说明:
适用版本:TCHouse-X 内核版本 2.0.0及以上版本。

like

语法

like(string, pattern[, escape]) -> boolean

功能说明

评估字符串是否与给定的模式(Pattern)匹配。模式可以包含普通字符和通配符。
%:匹配 0 个、1 个或多个字符。
_:匹配单个字符。
escape:可选,指定一个 ASCII 字符用于转义通配符。
匹配规则:区分大小写。

性能说明

缓存机制:每个执行线程最多允许编译 100 个正则表达式。
优化策略:简单模式如 hellohello%%hello%_hello_ 等将直接评估,不计入正则编译限制。只有复杂模式才会触发正则编译。

示例

SELECT like('abc', '%b%'); -- true
SELECT like('a_c', '%#_%', '#'); -- true (使用 # 转义 _)

rlike

语法

rlike(string, pattern) -> boolean

功能说明

基于正则表达式模式进行匹配。
包含匹配:与 like 不同,rlike 只需模式包含在字符串内即可返回 true(无需匹配整个字符串)。
锚定:若需完全匹配,请使用 ^$ 锚定符。
限制pattern 必须为常量字符串,不支持列引用。

示例

SELECT rlike('1a 2b 14m', '\\d+b'); -- true

regexp_extract

语法

regexp_extract(string, pattern) -> varchar
regexp_extract(string, pattern, group) -> varchar

功能说明

在字符串中查找正则表达式的第一次出现。
无 group 参数:返回第一个完整匹配的子串。
带 group 参数:返回指定捕获组(Capture Group)编号的内容。
限制:pattern 必须为常量字符串,不支持列引用。

示例

SELECT regexp_extract('1a 2b 14m', '\\d+'); -- '1'
SELECT regexp_extract('1a 2b 14m', '(\\d+)([a-z]+)', 2); -- 'a'

regexp_replace

语法

regexp_replace(string, pattern, overwrite) -> varchar
regexp_replace(string, pattern, overwrite, position) -> varchar

功能说明

将字符串中匹配正则表达式的部分替换为 overwrite 字符串。

替换逻辑

支持捕获组引用:使用 $g${g} 引用编号组,使用 ${name} 引用命名组。
转义符:使用 \\$ 表示原义美元符号。若 \\ 后紧跟非数字或非反斜杠字符,则忽略该 \\

参数说明

string:源字符串。
pattern:正则表达式。
overwrite:替换后的内容。
position:可选,起始搜索位置(从 1 开始)。若 position 大于字符串长度,返回原字符串;小于 1 则抛出异常。

限制说明

编译限制:单次函数调用中唯一正则表达式的编译上限为 20 个,超过将抛出异常。

示例

-- 基础替换
SELECT regexp_replace('Hello, World!', 'l', 'L'); -- 'HeLLo, WorLd!'
-- 捕获组替换
SELECT regexp_replace('300-300', '(\\\\d+)-(\\\\d+)', '400'); -- '400'
-- 指定起始位置
SELECT regexp_replace('Hello, World!', 'l', 'L', 6); -- 'Hello, WorLd!' (从位置6开始替换)
SELECT regexp_replace('Hello, World!', 'l', 'L', 5); -- 'Hello, World!' (o之后没有l,不匹配)