re2
使用 RE2 的 ClickHouse 兼容正则函数
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
re2 | 0.4.1 | UTIL | PostgreSQL | C++ |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 4235 | re2 | 否 | 是 | 否 | 是 | 是 | 是 | - |
Stable PGXN and PIGSTY package release 0.4.1 for PostgreSQL 16 through 18.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.4.1 | 1817161514 | re2 | - |
| RPM | PIGSTY | 0.4.1 | 1817161514 | re2_$v | - |
| DEB | PIGSTY | 0.4.1 | 1817161514 | postgresql-$v-re2 | - |
构建
您可以使用 pig build 命令构建 re2 扩展的 RPM / DEB 包:
BASH
安装
您可以直接安装 re2 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
BASH
使用 pig 或者是 apt/yum/dnf 安装扩展:
安装
BASH
pig
BASH
dnf
BASH
apt
BASH
创建扩展:
SQL
用法
来源:
re2 提供与 ClickHouse 兼容、由 Google RE2 引擎实现的正则表达式函数。它同时提供 text 与 bytea 重载,因此也能搜索包含 \\0 字节的二进制数据。版本 0.4.1 还增加了索引辅助匹配,并可报告所链接的 RE2 版本。
SQL
核心函数
re2match(haystack, pattern) -> booleanre2extract(haystack, pattern) -> text|byteare2extractall(haystack, pattern) -> text[]|bytea[]re2regexpextract(haystack, pattern, index default 1) -> text|byteare2extractgroups(haystack, pattern) -> text[]|bytea[]re2extractallgroupsvertical(haystack, pattern) -> text[]|bytea[]re2extractallgroupshorizontal(haystack, pattern) -> text[]|bytea[]re2regexpquotemeta(haystack) -> text|byteare2splitbyregexp(pattern, haystack, max_substrings default 0) -> text[]|bytea[]re2replaceregexpone(haystack, pattern, replacement) -> text|byteare2replaceregexpall(haystack, pattern, replacement) -> text|byteare2countmatches(...)与re2countmatchescaseinsensitive(...)
SQL
多模式匹配
re2multimatch* 函数族既可接受多个模式参数,也可接受 VARIADIC 数组:
SQL
索引支持
版本 0.4.0 增加两种互补的索引路径:
SQL
扩展还为 RE2 谓词提供选择率估算。在 btree、GIN 与顺序扫描之间做选择前,请用代表性数据检查 EXPLAIN。
匹配语义
- 为匹配 ClickHouse 行为,
.默认可以匹配换行符。 - 如果不希望
.跨越换行,请在模式前添加(?-s)。 - 替换字符串支持
\\0到\\9的反向引用。
注意事项
- 上游要求在构建/安装时存在系统
re2库。 v0.4.x二进制使用 SQL 扩展版本0.4;替换旧二进制后,如有待处理的升级,请运行ALTER EXTENSION re2 UPDATE TO '0.4'。v0.4.1修复了与缓存相关的释放后使用问题,并改善稳定模式与多模式匹配性能;应使用它而不是v0.4.0。re2splitbyregexp的参数顺序是pattern, haystack[, max_substrings];早于0.3.0的构建使用相反顺序。- RE2 有意不支持模式中的反向引用和环视断言等功能;它的有界时间行为与 PostgreSQL 原生正则表达式引擎不同。