正则表达式,匹配查找函数(preg_match_all)flags参数对比

格式:

int preg_match_all ( string pattern, string subject, array matches [, int flags] )

参数 flags 选项有以下3个:

PREG_PATTERN_ORDER  //是默认参数
PREG_SET_ORDER
PREG_OFFSET_CAPTURE

我们用例子来看看 PREG_PATTERN_ORDER 和 PREG_SET_ORDER 的区别。(须查看源代码)

<?php

$str = '<a href="http://www.baidu.com/">百度</a>,
    <a href="http://www.google.com/">谷歌</a>,
    <a href="http://www.caiguai.net/">怪手论坛</a>';

preg_match_all('/<a href="(.*?)">(.*?)<\/a>/', $str, $matches_pattern, PREG_PATTERN_ORDER);
preg_match_all('/<a href="(.*?)">(.*?)<\/a>/', $str, $matches_set, PREG_SET_ORDER);

echo "<pre>";

print_r($matches_pattern);

echo "<p>";

print_r($matches_set);

 

$matches_pattern 返回的数据为: 

Array
(
    [0] => Array
        (
            [0] => <a href="http://www.baidu.com/">百度</a>
            [1] => <a href="http://www.google.com/">谷歌</a>
            [2] => <a href="http://www.caiguai.net/">怪手论坛</a>
        )

    [1] => Array
        (
            [0] => http://www.baidu.com/
            [1] => http://www.google.com/
            [2] => http://www.caiguai.net/
        )

    [2] => Array
        (
            [0] => 百度
            [1] => 谷歌
            [2] => 怪手论坛
        )

)

$matches_set 返回的数据为:

Array
(
    [0] => Array
        (
            [0] => <a href="http://www.baidu.com/">百度</a>
            [1] => http://www.baidu.com/
            [2] => 百度
        )

    [1] => Array
        (
            [0] => <a href="http://www.google.com/">谷歌</a>
            [1] => http://www.google.com/
            [2] => 谷歌
        )

    [2] => Array
        (
            [0] => <a href="http://www.caiguai.net/">怪手论坛</a>
            [1] => http://www.caiguai.net/
            [2] => 怪手论坛
        )

)

 

而根据我之前阅读别人代码,就一直认为应该这么来组合结果:

foreach ($matches_pattern[0] as $tid=>$val) {
    echo '链接:'.$matches_pattern[1][$tid];
    echo '网址:'.$matches_pattern[2][$tid];
    echo "\r\n";
}
/**
 *  返回结果为:
 *  
链接:http://www.baidu.com/网址:百度
链接:http://www.google.com/网址:谷歌
链接:http://www.caiguai.net/网址:怪手论坛 
 */

而PREG_SET_ORDER,就在于重新组合的数据,使得数组数据可以更方便的利用:

foreach ($matches_set as $v) {
    echo '链接:'.$v[1];
    echo '网址:'.$v[2];
    echo "\r\n";
}
/**
 *  返回结果为:
 *  
链接:http://www.baidu.com/网址:百度
链接:http://www.google.com/网址:谷歌
链接:http://www.caiguai.net/网址:怪手论坛 
 */

 

转载于:https://www.cnblogs.com/zhuyongzhe/p/7848491.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值