正则表达式的高级技巧8个常用的概念(3)
http://www.itjxue.com 2015-08-06 23:50 来源:未知 点击次数:
3. 已命名捕获组(Named Groups)
当在一个表达式内多次用到回调引用时,很容易就把事情搞混淆,要弄清那些数字(\1 … \9)都代表哪一个子内容是件很麻烦的事。回调引用的一个替代方法是使用带名字的捕获组(下文简称“有名组”)。有名组使用(?Ppattern)来设定,name代表组名,pattern是配合该有名组的正则结构。请看下面的例子:
/(?P<quote>"|').*?(?P=quote)/
上式中,quote就是组名,"|'是改组匹配内容的正则。后面的(?P=quote)是在调用组名为quote的有名组。这个式子的效果和上面的回调引用实例一样,只不过是用了有名组来实现。是不是更加易读易懂了?
有名组也能用于处理已匹配内容之数组的内部数据。赋予特定正则的组名也能作为所匹配到的内容在数组内部的索引词。
preg_match( '/(?P<quote>"|\')/', "'String'", $matches );
# 下面的语句输出“'”(不包括双引号)
echo $matches[1];
# 使用组名调用,也会输出“'”
echo $matches['quote'];
所以,有名组并不只是让写代码更容易,它也能用于组织代码。