乐心博客

逆流而上,遇强则强

preg_match_all 结果排序之PREG_SET_ORDER参数

今天在写通用采集类的时候,需要用到正则处理一些匹配,比较常用的当然就是preg_match_all了,以前也经常使用它来进行正则的匹配。刚在查看preg_match_all的手册的时候,注意到原来preg_match_all有一个PREG_SET_ORDER的参数,是用于设置匹配后返回的数组的顺序。

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_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);

print_r($matches_pattern);

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] => 怪手论坛
        )

)

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

仅有一条评论

  1. 小伙子不错哦

添加新评论