php preg_match()第三个参数

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上也可以看出来,是匹配到字符串结尾。

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

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值