有人告诉我,在 perl 中禁用反向引用可以提高性能(前提是您没有使用它们),并且如果您不使用任何反向引用,perl 将自行执行此操作。
现在我有一个包含大量正则表达式的 perl 脚本,只有一个使用反向引用,我想知道以下内容:
(?:
,但我不想将它添加到每个分组中)? sub
或 eval
是否会更改 perl 是否关闭对它之外的事物的反向引用)? 最佳答案
使用捕获括号只会惩罚使用它们的正则表达式,所以在需要捕获的地方使用它们,但使用非捕获括号(?:...)
当您只需要分组时。
使用任何全局匹配变量
$` $& $'
对 施加性能损失全部 正则表达式,所以尽可能避免使用它们。 (但是一旦你这样做了,就发疯了!你已经付出了代价。)没有办法打开和关闭它。一旦 Perl 检测到它们被用于任何地方(甚至在您可能使用的第三方模块中),该功能就会被打开。
从 Perl 5.10.0 开始,全局匹配变量有一些替代方案,它们只惩罚使用它们的正则表达式。如果添加
/p
修饰符到特定的正则表达式,然后您可以使用${^PREMATCH} ${^MATCH} ${^POSTMATCH}
反而。
关于regex - 在 perl 中禁用反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3815525/