不喜欢广告? 去 无广告 今天
Regex 风格转换器(PCRE / JS / Python / Go)
开发人员
广告 移除?
广告 移除?
指导
正则表达式语言风格转换器
在各种编程语言风格之间转换正则表达式:PCRE (PHP)、JavaScript、Python、Go、Java 和 Ruby。自动转换命名组、标志、反向引用和其他语法差异。高亮显示不兼容的功能并提供清晰的警告。包含一个测试面板,用于使用示例字符串验证您转换后的正则表达式。
如何使用
输入您的正则表达式模式,选择源语言风格(编写它的语言)和目标语言风格(您想转换到的语言)。转换后的正则表达式会即时显示,所有标志都会被翻译。查看转换说明以了解所做的更改以及有关不支持功能的警告。使用测试面板根据示例文本验证转换后的模式。
特征
- 6 种正则表达式语言风格 — PCRE (PHP)、JavaScript (ES2018+)、Python (re 模块)、Go (regexp)、Java (java.util.regex) 和 Ruby。可在任意两种风格之间转换。
- 命名组转换 — 自动在 (?P…) (PCRE/Python/Go) 和 (?…) (JS/Java/Ruby) 语法之间进行转换。
- 标志翻译 — 在不同语言风格之间转换标志:/gi (JS) ↔ re.IGNORECASE (Python) ↔ (?i) 内联 (PCRE/Go) ↔ Pattern.CASE_INSENSITIVE (Java)。
- 反向引用转换 — 命名反向引用转换:(?P=name) ↔ k 在不同语言风格之间。
- 不兼容性警告 — 颜色编码警报:绿色表示转换顺利,黄色表示语法更改,红色表示不支持的功能(例如,Go 不支持后行断言,JS 不支持原子组)。
- 测试面板 — 使用 JavaScript 的 RegExp 引擎,根据示例字符串测试转换后的正则表达式。显示匹配项、捕获组和匹配计数。
- 语法参考 — 可折叠的参考表,显示所有语言风格之间的主要区别:命名组、先行/后行断言、标志、字符类、原子组、Unicode 支持。
- 自动转换 — 在您键入或更改语言风格时,结果会即时更新。
转换内容
命名组: (?P) ↔ (?) 语法差异。
命名反向引用: (?P=name) ↔ \k ↔ \g{name}。
标志: 内联 (?imsx)、后缀 /gi 和特定于语言的常量。
后行断言: PCRE/JS/Java 支持,Python/Ruby 有限,Go 不支持。
原子组: (?>…) — 仅限 PCRE/Java/Ruby;JS/Python/Go 会发出警告。
占有量词: a++ — 仅限 PCRE/Java/Ruby。
字符类: \R、\h、\v (PCRE 特有) 会为其他语言风格标记。
评论: (?#…) 语法 — 仅限 PCRE/Python。
条件: (?(cond)yes|no) — 仅限 PCRE。
广告 移除?
为什么不同编程语言的正则表达式风格不同?
正则表达式的实现是在不同编程语言中独立发展的。Perl 的正则表达式引擎 (PCRE) 成为功能最丰富的,添加了命名组、后行断言、原子组和其他高级功能。其他语言则采纳了其子集:JavaScript 最初只有基本的正则表达式,并逐渐添加了功能(ES2018 中的命名组、ES2018 中的后行断言)。Python 的 re 模块使用从早期提案继承的 (?P) 语法。Go 则故意选择了一个更简单的正则表达式引擎 (RE2),它保证线性时间匹配,但牺牲了后行断言等功能。每种语言在功能强大和性能之间都做出了不同的权衡。
哪些正则表达式功能无法转换?
某些功能只存在于一种或两种语言风格中,而在其他语言风格中没有等效功能。后行断言在 Go 的 RE2 引擎中不存在——没有变通方法,只能重新设计模式。原子组和占有量词(PCRE/Java/Ruby)在 JavaScript、Python 或 Go 中没有直接的等效项。PCRE 特有的字符类,如 \R(任何换行符)、\h(水平空格)和 \v(垂直空格),需要扩展为字符类等效项。条件模式 (?(cond)yes|no) 仅限 PCRE。此工具会警告您这些不兼容之处,以便您知道哪些需要手动处理。
测试面板对所有语言风格都准确吗?
测试面板使用 JavaScript 的原生 RegExp 引擎,因此可以准确地测试 JavaScript 正则表达式的行为。对于其他目标语言风格,测试提供了合理的近似值,但在边缘情况下可能有所不同——尤其是在 Unicode 处理、换行行为以及 JavaScript 不支持的功能(如原子组)方面。在生产环境中使用时,请务必在实际的目标语言中测试转换后的正则表达式。测试面板最适合用于快速验证基本模式匹配。
PCRE 和 JavaScript 正则表达式有什么区别?
PCRE(Perl 兼容正则表达式,PHP 使用)是最丰富的功能集:它支持使用 (?P) 的命名组、可变长度后行断言、原子组 (?>…)、占有量词 (a++)、条件模式、递归模式以及内联标志作用域 (?i:…)。JavaScript 正则表达式更简单:命名组使用 (?),后行断言在 ES2018 中添加,并且不支持原子组、占有量词或条件。PCRE 使用类似 JavaScript 的 /pattern/flags 语法,但支持更多标志(x 用于详细模式,s 用于 DOTALL)。将 PCRE 转换为 JS 通常需要删除高级功能。
