使用PHP正则表达式,我想使用命名的5.5+引用来捕获一个组。
例如,我希望下列文本与之匹配:
1-1
2-2
但以下情况并非如此
8-7
但是,当我尝试使用反向引用时,PHP将其标记为match found:
/* This statement evaluates to 1 */
preg_match("/(?<one>[1-9])\-(?<two>\\g<one>)/", "8-7");
除了使用编号引用之外,还有其他解决办法吗?
发布于 2015-04-18 21:14:55
请参阅PCRE文档的摘录
为了与Oniguruma兼容,非Perl语法
\g
后面有一个名称或一个数字,它包含在尖括号或单引号中,是将子模式作为子例程引用的另一种语法,可能是递归的。 注意,\g{...}
(Perl语法)和\g<...>
(洋葱语法)不是同义词。前者是一个反向引用;后者是一个子程序调用。
通过使用\g<one>
,您不会引用匹配,而是引用子模式,请参阅regex101.com上的说明。
\g<one>
递归名为one
的子模式。
您需要使用\1
来匹配在第一个组中捕获的相同文本。
(?<one>[1-9])\-(?<two>\1)
或者(对实际文本的命名反向引用),
(?<one>[1-9])\-(?<two>\g{one})
\1
与第一个捕获组最近匹配的文本相同。
https://stackoverflow.com/questions/29722700
复制相似问题