preg_match_all 总结

例子:

        $str="/post/<action:\w+>/<key:\d+>/";
       
        //NULL
        preg_match_all("/<(\w+):?([^>]+)?>/",$str,$matches);
       
        echo "NULL";
        var_dump($matches);
       
        //PREG_PATTERN_ORDER
        preg_match_all("/<(\w+):?([^>]+)?>/",$str,$matches,PREG_PATTERN_ORDER);
       
        echo "PREG_PATTERN_ORDER";
        var_dump($matches);
       
        //PREG_SET_ORDER
        preg_match_all("/<(\w+):?([^>]+)?>/",$str,$matches,PREG_SET_ORDER);
       
        echo "PREG_SET_ORDER";
        var_dump($matches);
       
        //PREG_OFFSET_CAPTURE | PREG_SET_ORDER
        preg_match_all("/<(\w+):?([^>]+)?>/",$str,$matches,PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
       
        echo "PREG_OFFSET_CAPTURE | PREG_SET_ORDER";
        var_dump($matches);

 

输出结果:

NULL

array (size=3)
  0 => 
    array (size=2)
      0 => string '<action:\w+>' (length=12)
      1 => string '<key:\d+>' (length=9)
  1 => 
    array (size=2)
      0 => string 'action' (length=6)
      1 => string 'key' (length=3)
  2 => 
    array (size=2)
      0 => string '\w+' (length=3)
      1 => string '\d+' (length=3)

PREG_PATTERN_ORDER

array (size=3)
  0 => 
    array (size=2)
      0 => string '<action:\w+>' (length=12)
      1 => string '<key:\d+>' (length=9)
  1 => 
    array (size=2)
      0 => string 'action' (length=6)
      1 => string 'key' (length=3)
  2 => 
    array (size=2)
      0 => string '\w+' (length=3)
      1 => string '\d+' (length=3)

PREG_SET_ORDER

array (size=2)
  0 => 
    array (size=3)
      0 => string '<action:\w+>' (length=12)
      1 => string 'action' (length=6)
      2 => string '\w+' (length=3)
  1 => 
    array (size=3)
      0 => string '<key:\d+>' (length=9)
      1 => string 'key' (length=3)
      2 => string '\d+' (length=3)

PREG_OFFSET_CAPTURE | PREG_SET_ORDER

array (size=2)
  0 => 
    array (size=3)
      0 => 
        array (size=2)
          0 => string '<action:\w+>' (length=12)
          1 => int 6
      1 => 
        array (size=2)
          0 => string 'action' (length=6)
          1 => int 7
      2 => 
        array (size=2)
          0 => string '\w+' (length=3)
          1 => int 14
  1 => 
    array (size=3)
      0 => 
        array (size=2)
          0 => string '<key:\d+>' (length=9)
          1 => int 19
      1 => 
        array (size=2)
          0 => string 'key' (length=3)
          1 => int 20
      2 => 
        array (size=2)
          0 => string '\d+' (length=3)
          1 => int 24

总结:

1. 不加标志和使用PREG_PATTERN_ORDER标志是等效的

2. 对于PREG_PATTERN_ORDER标志

    a. 生成的结果为二维数组

    b. array[0] 为所有匹配的完整字符串

    c.  array[1] 为匹配模式串中第一个小括号匹配到的所有字符串,例如例子中的匹配模式串为"/<(\w+):?([^>]+)?>/”,

         包含两个小括号,第一个为(\w+),第二个为([^>]+),因此array[1]保存的是(\w+)匹配到的所有字符串

    d: array[2]同理,保存的是第二个小括号匹配到的所有字符串,如果还有更多的小括号,依次类推。

3. 对于PREG_SET_ORDER标志

    a. 生成的结果为二维数组

    b. array[0] 为第一个匹配到的字符串及其相关的子字符串,从输出结果可以看出,array[0][0]为第一个匹配到的完整

         的字符串,然后array[0]内后续的元素分别对应第一个小括号匹配的字符串,第二个小括号匹配的字符串,依次类推。

    c. array[1]同上,为第二个匹配到的字符串及其相关的子字符串。以此类推。

4. 对于PREG_PATTERN_ORDER和PREG_SET_ORDER标志

    a. 生成的结果为三维数组

    b. 从输出结果可以看出,这种混合标志类型是在PREG_SET_ORDER标志基础之上,对其每个元素绑定了一个偏移量

        需要注意的是,这里偏移量的计数是从0开始计数的。

 

从输出结果可以看出PREG_PATTERN_ORDER每一个数组包含的都是匹配到所有字符串,而PREG_SET_ORDER则

是一个一个地处理匹配到的字符串。

 

初学php,以上存在理解错误之处,希望能给予指正,相互学习,共同进步。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值