【问题标题】:Backreferences to other recursion levels in PHP / PCRE反向引用 PHP / PCRE 中的其他递归级别
【发布时间】:2018-01-10 10:26:41
【问题描述】:

我试图在网上找到答案,但我无法找到。本页第三部分是否适用于 PHP / PCRE?

https://www.regular-expressions.info/recursebackref.html

“对其他递归级别部分的反向引用”。我只对 PHP 感兴趣,所以如果这不适用于 PHP 语言(或可能是 JavaScript),这就是我需要知道的全部内容。

谢谢。

【问题讨论】:

  • 在 php 中不能反向引用其他递归级别?
  • PHP 使用/实现 PCRE,本页讲的是 PCRE,所以它适用于 PHP 的 PCRE。另一方面,您可能只是对其进行了测试。
  • 我认为最后两节与 Ruby 相关,与 PHP 无关。

标签: php regex recursion pcre regex-recursion


【解决方案1】:

PCRE 不支持具有递归级别的反向引用,该信息与 Ruby Onigmo 正则表达式引擎有关。

Onigmo reference:

\k<n+level>  \k'n+level'
\k<n-level>  \k'n-level'
\k<-n+level> \k'-n+level'
\k<-n-level> \k'-n-level'

\k<name+level> \k'name+level'
\k<name-level> \k'name-level'

Destine a group on the recursion level relative to the referring position.

ex 1.

  /\A(?<a>|.|(?:(?<b>.)\g<a>\k<b>))\z/.match("reee")
  /\A(?<a>|.|(?:(?<b>.)\g<a>\k<b+0>))\z/.match("reer")

  \k<b+0> refers to the (?<b>.) on the same recursion level with it.

查看Rubular demo

对于PCRE,唯一允许的语法反向引用是

 \n              reference by number (can be ambiguous)
 \gn             reference by number
 \g{n}           reference by number
 \g{-n}          relative reference by number
 \k<name>        reference by name (Perl)
 \k'name'        reference by name (Perl)
 \g{name}        reference by name (Perl)
 \k{name}        reference by name (.NET)
 (?P=name)       reference by name (Python)

【讨论】:

    猜你喜欢
    • 2010-09-06
    • 2015-08-21
    • 2010-11-28
    • 2018-06-23
    • 2011-08-12
    • 1970-01-01
    • 2011-05-18
    • 2014-04-04
    • 1970-01-01
    相关资源
    最近更新 更多