【问题标题】:How to convert Ruby Regular Expression into PCRE如何将 Ruby 正则表达式转换为 PCRE
【发布时间】:2014-08-05 08:19:09
【问题描述】:

我想把一些ruby代码改写成c/c++代码,所以想用一个c实现的正则表达式库。看来PCRE是个不错的选择。有许多 ruby​​ 风格的正则表达式。如何自动将其转换为 PCRE 样式。

【问题讨论】:

  • 您能否提供一些不能在 c/c++ 代码中复制并用作 PCRE 的“Ruby 正则表达式”示例?
  • 如果我错了,请纠正我,但我认为 Ruby 实际上使用 PCRE。
  • @p11y 当前 MRI Ruby 使用 Onigmo。我不认为早期版本使用 PCRE - 其他实现可能。

标签: ruby regex pcre


【解决方案1】:

Ruby regular expressionsPCRE 正则表达式,因为 PCRE 代表 Perl Compatible Regular Expressions,并为它支持的正则表达式定义了特定的语法。

有关个别 PCRE 正则表达式功能的帮助,请参阅我链接到的第二篇文章,对于 ruby​​ 特定方法,请参阅第一篇(正如您将看到的,实际使用的正则表达式的语法是相同的)

编辑:正如 cmets 中所指出的,ruby 使用的正则表达式引擎是Onigmo,根据链接到的页面,它具有 Perl 5.10 的一些新功能。 PCRE 是一个正则表达式库,“PCRE 的当前实现与 Perl 5.12 大致对应”,因此边缘可能存在一些差异。虽然语法大致相同,但请查看 Onigmo github 页面和 ruby​​ api dock 以查看差异。总的来说,尽管可以安全地假设您从 ruby​​ 转换为 PCRE 的大多数正则表达式都可以正常工作。

【讨论】:

  • PCRE 是一个特定的正则表达式库。当前的 MRI Ruby 使用 Onigmo 正则表达式引擎。虽然这两个引擎可能共享许多功能,但它们并不相同。
  • @matt 我觉得 Onigmo 符合 PCRE 标准?
  • PCRE 手册页说它使用“与 Perl 相同的语法和语义,只有一些差异”并且“支持一两个 .NET 和 Oniguruma 语法项”(Onigmo是 Onigurama 的一个叉子)。 Onigmo 自述文件说“可以使用 Perl 5.10+ 中引入的一些新功能”。它们可能广泛兼容,但边缘会有差异,特别是对于更高级和晦涩的功能。我的观点是 PCRE 是一个库,而不是规范,Ruby 不使用它。
  • @matt 好点子,在 PCRE 页面上也写着“PCRE 的当前实现与 Perl 5.12 大致对应”,所以 Onigmo 落后了几个点。我将编辑我的答案以包含此信息,感谢您指出。如果您认为应该添加/更改任何其他内容,请告诉我。
【解决方案2】:

有一个 Ruby 构造可能会导致问题:#{code}

这可以在正则表达式中使用,它将被代码的结果替换(如双引号字符串)。

一个例子:"dideldideldummdummdumm".match(/didel#{'dumm'*2}/)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    相关资源
    最近更新 更多