首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP中的命名正则表达式回引用

PHP中的命名正则表达式回引用
EN

Stack Overflow用户
提问于 2015-04-18 20:50:34
回答 1查看 758关注 0票数 2

使用PHP正则表达式,我想使用命名的5.5+引用来捕获一个组。

例如,我希望下列文本与之匹配:

代码语言:javascript
运行
复制
1-1
2-2

但以下情况并非如此

代码语言:javascript
运行
复制
8-7

但是,当我尝试使用反向引用时,PHP将其标记为match found:

代码语言:javascript
运行
复制
/* This statement evaluates to 1 */
preg_match("/(?<one>[1-9])\-(?<two>\\g<one>)/", "8-7");

除了使用编号引用之外,还有其他解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-18 21:14:55

请参阅PCRE文档的摘录

为了与Oniguruma兼容,非Perl语法\g后面有一个名称或一个数字,它包含在尖括号或单引号中,是将子模式作为子例程引用的另一种语法,可能是递归的。 注意,\g{...} (Perl语法)和\g<...> (洋葱语法)不是同义词。前者是一个反向引用;后者是一个子程序调用。

通过使用\g<one>,您不会引用匹配,而是引用子模式,请参阅regex101.com上的说明。

\g<one>递归名为one的子模式。

您需要使用\1来匹配在第一个组中捕获的相同文本。

代码语言:javascript
运行
复制
(?<one>[1-9])\-(?<two>\1)

或者(对实际文本的命名反向引用),

代码语言:javascript
运行
复制
(?<one>[1-9])\-(?<two>\g{one})

\1与第一个捕获组最近匹配的文本相同。

编号的演示和a 命名后引用演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29722700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档