正则与模式匹配

正则引擎测试真实运行 PCRE2 与 RE2

选择已实现的引擎,输入模式主体和文本,再手动运行本地测试。

正则引擎测试

表达式

只输入模式主体,不带 / 分隔符;RE2 内部始终使用 Unicode。

测试文本

结果

等待输入或手动测试。

所有匹配均在浏览器本地独立线程执行,不上传表达式或测试文本。

选项

等待输入或手动测试。

引擎能力矩阵

只有 PCRE2 和 RE2 在本站执行;语言行是参考,不可选择运行。

目标本站执行后顾反向引用边界
PCRE2可执行支持支持PCRE2 WASM;PHP 包装层另算。
RE2可执行不支持不支持RE2 WASM;不是 Go 或 Rust 运行时。
PHP / PCRE2仅 PCRE2 核心支持支持PHP preg_* 另含分隔符与返回规则。
Java仅供参考支持支持本站没有 Java 运行时。
Go仅供参考不支持不支持Go regexp 是另一种实现。
Rust仅供参考不支持不支持Rust regex 是另一种实现。
.NET仅供参考支持支持本站没有 .NET 运行时。

从 PHP 把模式搬进 Go 服务时,JavaScript 的高亮不能证明目标引擎会接受。正则引擎测试用同一份文本展示真正的编译结果。

正则表达式引擎对比需要明确运行时。这里可做 PCRE2 正则测试;Go 正则测试和 Java 正则测试仍应在对应语言里最终确认,本站的矩阵只说明能力。

为什么用正则引擎测试

同一份输入,直接看到真实的语法差异。

名称对应真实执行

正则引擎测试只开放 PCRE2 与 RE2。后顾在 PCRE2 中成功匹配,在 RE2 中会明确报语法错误。

同一个抽象模式在 PCRE2 路径中高亮一处匹配,在 RE2 路径中显示语法错误。

旧报告不会误导

切换引擎、修改模式、文本或选项后,复制和下载立即禁用,必须重新运行。

输入变化后,旧报告变淡且导出箭头被锁住。

用同一份样本核对差异

01

只写模式主体

输入 (?<=a)b,不带 / 分隔符。载入示例会先预览覆盖内容,应用后可撤销一次。

  • 空模式可以手动运行,但初始页面不会自动给出匹配。
02

选择真正运行的引擎

默认 PCRE2,RE2 是独立 WASM。忽略大小写与多行选项默认关闭。

  • 按 Ctrl/Cmd+Enter 也能运行;修改内容不会自动重复测试。
03

看位置与捕获组

结果位置从 0 开始,以 UTF-16 为单位,结束位置不包含在内。列表每次多显示 50 条,JSON 导出包含全部有效结果。

  • 超时或超限时,不提供残缺结果的导出。

每次测试能看到什么

真实语法错误

PCRE2 接受后顾与反向引用;RE2 拒绝时展示编译错误,不会静默改用 JavaScript。

捕获组与 Unicode 索引

每条匹配显示编号组和命名组;RE2 的码点位置会转换为 UTF-16,避免 emoji 后高亮错位。

可中止的本地任务

Worker 可被手动停止,最长运行两秒。输入、匹配条数和报告体积都有上限。

引擎范围与资源边界

PCRE2 不等于整个 PHP
这里执行 PCRE2 核心,不解析 PHP 分隔符,也不模拟 preg_match 的返回格式。
RE2 不等于 Go 或 Rust
Go regexp 与 Rust regex 和 RE2 有相近语法,但实现不同;矩阵不把它们标成已执行。
只提供匹配
暂不做替换、提取或拆分,防止把不同引擎的替换记号混为一谈。
超限即失败
文本最多 100000 个 UTF-16 单位、模式最多 2000 个、匹配最多 1000 条;两秒超时和报告超限均不导出部分结果。

正则引擎测试常见问题

Go 正则表达式为什么不支持后行断言?

正则引擎测试默认执行 PCRE2 核心。PHP preg_* 还有分隔符和包装行为,这里不模拟。

PHP 的 PCRE2 与 Java 正则有什么区别?

JavaScript 能接受的后顾或反向引用在 RE2 中可能报错;最终仍需用 Go 自身 regexp 验证。

如何测试 Go 的真实正则引擎?

不支持。选择 RE2 后会展示真正的编译错误,而不是 JavaScript 的替代结果。

同一条正则在不同语言中能通用吗?

不能保证。Unicode、修饰符和捕获规则随引擎变化,迁移前应在目标运行时复测。

正则测试工具用的是哪种引擎?

这里只实际执行 PCRE2 和 RE2。Java 只是能力参考,不是假装运行 Java 的正则测试器。

还有疑问?

立即使用正则引擎测试

载入差异示例运行正则引擎测试,再在相同文本上切换 PCRE2 和 RE2。

模式和测试文本只在浏览器本地处理,不自动发送网络请求。