首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PCRE与PCRE2的Regex差异

PCRE与PCRE2的Regex差异
EN

Stack Overflow用户
提问于 2021-12-08 10:01:11
回答 1查看 1K关注 0票数 10

我们正在考虑从PCRE转向PCRE2作为我们的内部regex引擎。只有regex语法本身公开给我们的用户,所以库API的差异不是我们使用的问题。然而,我们必须记录任何行为的变化。

很多网站都在讨论API的不同之处,但我还没有在regex符号中找到任何列出实际差异的网站。虽然我知道[\w-_]的意思与[\w\-_] 在PCRE中的意思相同,但实际上是invalid in PCRE2,但我怀疑还存在其他的差异。

在PCRE2的正则表达式与PCRE的正则表达式有什么不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-19 02:00:57

PCRE v8.36与PCRE2 10.39编译后的差异

我已经编译了一个列表,这些更改是从pcre转换到pcre2时可能遇到的问题。我已经排除了在pcre中模式可能遇到的各种溢出、潜流、分段违规和各种错误。

Pcre2有一个版本检查模式。您可以在与"yesno“匹配的/(?(VERSION>=10)yes|no)/应用程序中检查该版本。

可能发生的重大变化:

  • /()a/等模式未能设置“第一个字符必须是'a'”信息。例如,/(?:(?=.)|(?<!x))a/
  • 当Perl和JIT找到"c“时,像/a\K.(?0)*/与"abac”匹配的模式就会找到"bac“。\K的效果没有得到正确的传播。并非所有\K的使用都会产生错误的结果。
  • 使用(*ACCEPT)没有取消其他组捕获,只留下包含不正确信息的排卵器。例如,/(x)|((*ACCEPT))/与"abcd“匹配。
  • 对于类似于UTF模式下的/(?i)[A-`]/模式和混合情况的模式,可以将范围保留在类之外,在这种情况下,and被排除在外。
  • 当用作条件时对(*FAIL)进行优化的断言。例如,(?(?!)a|b)
  • 对于\8\9,现在匹配Perl。它们要么是后面的引用,要么是字面字符"8“和"9”。
  • 报告空子模式名称(如(?'') )的错误。
  • 与空字符串匹配的条件组的重复非捕获组无法标识为匹配空字符串。例如,/^(?:(?(1)x|)+)+$()/.
  • EBCDIC环境的各种破坏变化。
  • 启用Unicode支持的PCRE2在类中使用\p\P时不会报告错误。
  • 可能与空字符串匹配的重复条件组被错误编译。例如,/(?(R))*+/
  • 如果出现单个字符,像[[:punct:]b]这样的序列将忽略POSIX类。
  • 在UCP模式下,[:punct:]匹配128-255中不应该匹配的字符.
  • 否定类(如[^[:^ascii:]\d] )和非否定类(如[:^ascii:][:^xdigit:] )不正确地包含大于255个的所有代码点。
  • 在模式开始时设置任何(?imsxJU)选项不再传输到PCRE2_INFO_ALLOPTIONS返回的选项。
  • \Q\E放在量词(如A+\Q\E+ )的中间,现在被忽略了。
  • 在断言条件之前的标注之后,可能会出现一个空的\Q\E序列,但是它将被忽略。
  • 现在,您可以在查找后断言中的组之后使用{0}
  • PCRE2现在与perl匹配,将(?(DEFINE)...)视为一个“定义”组,即使存在一个名为"define“的组。
  • 递归条件测试现在必须引用现有的子模式。例如,(?(R2)...)
  • 如果组名以"R“开头,则使用条件递归测试行为不当。例如,(?(R)...)
  • POSIX字符类后面的连字符立即偏离Perl。它允许作为一个文字,但PCRE2现在会生成一个错误。
  • (?=.*X)X$这样的模式被错误地优化,就好像它们需要一个初始的'X‘和后面的'X’一样。
  • .*开头的断言被错误地优化,要求在主题的开头或换行符之后进行匹配。有些情况不是真的,例如(?=.*[A-Z])(?=.{8,16})(?!.*[\s])
  • 如果条件子模式中的唯一分支被锚定,则整个子模式将被错误地视为锚定。例如,/(?(1)^())b/ or /(?(?=^))b/
  • 以子例程调用开始的模式和最小限定符为零的模式将被错误地设置为“匹配必须以此字符开始”。例如:/(?&xxx)*ABC(?<xxx>XYZ)/会期望'A‘是第一个字符。
  • 上游变化测井
  • PHP7.3 PCRE迁移说明
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70273084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档