PHP正则匹配问题

2014-07-18

学习php中发现,关于preg_match中匹配结果的问题:

首先举个例子,

$data2='aaaabbbccc这是间隔ddddeeefff这是间隔gggghhhjjj这里是间隔|kkkklllmmm';
preg_match_all('/gggg(h(hh))jjj/', $data2,$result);
$result=$result?$result:die('数据没抓到');
var_dump($result);
这个输出的结果为:

array
  0 => 
    array
      0 => string 'gggghhhjjj' (length=10)
  1 => 
    array
      0 => string 'hhh' (length=3)
  2 => 
    array
      0 => string 'hh' (length=2)
很容易理解result[0]为全部匹配结果,result[1]为第一次“括号”中匹配的结果,result[2]为第二次“括号”匹配的结果。

但是正则表达式变成这样呢:

$data2='aaaabbbccc这是间隔ddddeeefff这是间隔gggghhhjjj这里是间隔|kkkklllmmm';
preg_match_all('/gggg(h(hh))jjj|aaaa(bbb)c(cc)|dddd(eee)fff|kkkk(lll)mmm/', $data2,$result);
$result=$result?$result:die('数据没抓到');
var_dump($result);
博主就凌乱了,这个最后的result要如何分配呢。

实际上输出的结果如下:

array
  0 => 
    array
      0 => string 'aaaabbbccc' (length=10)
      1 => string 'ddddeeefff' (length=10)
      2 => string 'gggghhhjjj' (length=10)
      3 => string 'kkkklllmmm' (length=10)
  1 => 
    array
      0 => string '' (length=0)
      1 => string '' (length=0)
      2 => string 'hhh' (length=3)
      3 => string '' (length=0)
  2 => 
    array
      0 => string '' (length=0)
      1 => string '' (length=0)
      2 => string 'hh' (length=2)
      3 => string '' (length=0)
  3 => 
    array
      0 => string 'bbb' (length=3)
      1 => string '' (length=0)
      2 => string '' (length=0)
      3 => string '' (length=0)
  4 => 
    array
      0 => string 'cc' (length=2)
      1 => string '' (length=0)
      2 => string '' (length=0)
      3 => string '' (length=0)
  5 => 
    array
      0 => string '' (length=0)
      1 => string 'eee' (length=3)
      2 => string '' (length=0)
      3 => string '' (length=0)
  6 => 
    array
      0 => string '' (length=0)
      1 => string '' (length=0)
      2 => string '' (length=0)
      3 => string 'lll' (length=3)
我可以这么理解:

result[0][]为每一个正则的全部匹配结果。

result[1][2]为第一个括号匹配的结果,至于为什么索引是[2],我觉得是因为这条正则全部匹配的结果是在result[0][2]中的。

result[2][2]为第二个括号匹配的结果,至于为什么索引是[2],我觉得是因为这条正则全部匹配的结果是在result[0][2]中的。

424 查看