preg_match_all("/\w+\[.+?\]/s", $s, $r);
print_r($r);

解决方案 »

  1.   

    <?php
    $s="subtime[2006-06-01 00:00:26] serviceid[03201062] agent[] company[]
    subtime[2006-06-01 00:00:23] serviceid[03202766] agent[SAMSUNG-SGH-E108/ UP.Browser/6.1.0.6 (GUI) MMP/1.0] company[3]";
    preg_match_all("/\w+\[[^\]]+?\]/s", $s, $r);
    print_r($r);
    ?>
      

  2.   

    上面的可以去掉模式修正符s
    preg_match_all("/\w+\[[^\]]+?\]/", $s, $r);
      

  3.   

    要提取subtime[2006-06-01 00:00:23] 里的“2006-06-01 00:00:23”,我下面的代码哪儿不正确呢,提示错误:
    split(): REG_EBRACK in /logphp/log.php on line 10
    $log=file("../logphp/lenovo.log");while(list(,$value)=each($log))
    { preg_match_all("/\w+\[.*?\]/s", $value, $vars); if(count(explode("[",$vars[0][0]))>1){

    $varsaction=split("[",$vars[0][0]);
    $logarr[0] = $varsaction[1]; } }
      

  4.   

    正确啦,原来explode()和split()是有区别的
      

  5.   

    要取里面的数据这样就行了<?php
    $s="subtime[2006-06-01 00:00:26] serviceid[03201062] agent[] 
    company[]
    subtime[2006-06-01
     00:00:23] serviceid[03202766]
     agent[SAMSUNG-SGH-E108/ UP.Browser/6.1.0.6 (GUI) MMP/1.0] company[3]";
                  
    preg_match_all("/
                     \w+                           
                       \[
                          ([^\]]+?)
                       \]
                    /x", $s, $r);print_r($r[1]);
    ?>