php preg_match()第三个参数

来源:互联网 发布:淘宝免费旺铺模板下载 编辑:程序博客网 时间:2024/05/22 15:39

php手册中是这样解释的

matches

如果提供了参数matches,它将被填充为搜索结果。 $matches[0]将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推

到底是什么意思呢?

$matchs[0]很好理解,就是整个$pattern 匹配的文本,

$matchs[1]包含第一个捕获子组匹配到的文本,

列子:

$pattern = '/^(http:\/\/)?([^\/]+)/i';$subject = 'http://www.php.net/index.html';preg_match_all($pattern,$subject,$match);var_dump($match);

输出


array (size=3)  0 =>     array (size=1)      0 => string 'http://www.php.net' (length=18)  1 =>     array (size=1)      0 => string 'http://' (length=7)  2 =>     array (size=1)      0 => string 'www.php.net' (length=11)

数组中第一个$matchs[0]就是整个$pattern匹配到的文本元素

$pattern = '/^(http:\/\/)?([^\/]+)/i';   这是正则表达式  

$matchs[0] 就是整个正则匹配到的文本

$matchs[1] 匹配到的是子组 (http:\/\/) 匹配到的文本   所谓的子组 其是就是增则表达式里的一对对()。(http:\/\/) 是第一对

$matchs[2] 匹配到的是子组(^\/+) 匹配到的文本  (^\/+)是第二对

 

理解了么?

我是理解了

$matches[1] 将包含第一个捕获子组匹配到的文本。

就真的是第一个子组  也就是()中pattern匹配到的文本啊。

 

以上 原文地址:http://www.cnblogs.com/tumio/p/5390268.html

 

自己遇到的一个例子 比如:

$key='ad1_image_url';$value='data/files/mall/template/2016081708483821016.jpg'$ads=array();
if(preg_match("/^ad(\d+)_image_url$/",$key,$matches)){                            $ads[$matches[1]]['ad_image_url'] = $value;}

 这个时候打印$ads 结果如下:

很明显是个数组,里面有一个键值对

在打印 $ads[$matches[1]] 结果如下:

通过对比 就可以看出来 正则表达式中 第一对() 是匹配的数字,也就是上面$key中的1, 然后我把它当数组的键,用于存储$value,也就是说 $matches[1] 的值就是正则表达式里第一个 ()所匹配的内容。

补充; preg_match() 和preg_match_all() 有区别,前者是匹配到一个就停止,后面的不再进行匹配,后者是从all上也可以看出来,是匹配到字符串结尾。

综上所述,懂了 (→_→)