我想了解以下段落(来自Php.net:Link):
但是,如果反斜杠后面的十进制数小于10,则始终将其作为后引用,并且只有在整个模式中没有多少捕获左括号时才会导致错误。换句话说,引用的括号不必位于小于10的数字的引用的左侧。当涉及重复并且右侧的子模式参与较早的迭代时,“前向后引用”可能有意义。
据我所知,到目前为止,如果小数小于10,则对模式的所有左括号进行计数,如果数字大于10,则从我使用引用的那一刻开始只有左括号(例如\ 13) )被计算在内。
例如:
让我们说我们有这个简单的模式:
'/^(a)(b)(c)(d)\6(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)$/';
This is the string we testing: abcdfefghikjklmn
php.net说:
换句话说,引用的括号不必位于小于10的数字的引用左侧
因此,示例显示引用的括号是右侧,引用号小于10,那么为什么preg_match返回0?
如果有人可以帮助理解这一段,谢谢大家,祝你有个美好的一天。
答案 0 :(得分:2)
在字符类之外,反斜杠后跟一个数字更大 0(以及可能的其他数字)是对a的反向引用 在模式中更早地(即向左)捕获子模式, 前提是有许多以前的捕获 括号中。
但是,如果反斜杠后面的十进制数小于 在图10中,它总是作为后向引用,并且仅引起错误 如果没有那么多人捕获整个左括号 图案。换句话说,引用的括号不需要 对于小于10的数字,在参考的左边。“向前 反向引用“当涉及重复时可以有意义 右侧的子模式参与了之前的迭代。
\n
解释了(n > 0
总是):
n <= 9
:始终是对n
组的反向引用(无论捕获组位于何处)。如果捕获组少于n
,则会导致错误。n >= 10
:如果前面至少有n
个捕获组(起始),则只有后退参考。否则它是常规字符串中的转义序列。答案 1 :(得分:1)