我正在尝试理解以下段落(来自Php.net:链接):
然而,如果反斜杠后面的十进制数小于10,则始终将其视为向后引用,并且仅在整个模式中没有那么多捕获左括号时才会导致错误。换句话说,引用的括号不需要在数字小于10的情况下位于引用左侧。当涉及重复并且右侧的子模式已参与先前迭代时,“正向向后引用”是有意义的。
据我所知,如果十进制数小于10,则计算模式中所有左括号的数量;如果数字大于10,则仅计算使用引用(\13,例如)的位置左侧的左括号。
例如:
假设我们有这个简单的模式:
据php.net所说:
换句话说,引用的括号可以不在参考数字左边,尤其是当数字小于10时。
因此,正如示例所示,所引用的括号位于右侧,而参考数字小于10,那么为什么preg_match返回0?
如果有人能帮忙理解这段文字,谢谢大家,祝您愉快!
然而,如果反斜杠后面的十进制数小于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
是因为在遇到\6
时第六个捕获组没有捕获任何内容,并且没有其他可匹配的内容。我认为不可能将反向引用与空值匹配。如果您使用了(\6|)
,那么它就可以工作了。 - MikeM