有一个字符串:[ti:霜华浓][ar:小曲儿][al:][by:文超]
我现在想要分别匹配出:[ti:霜华浓]、[ar:小曲儿]、[al:]、by:文超]我写的代码如下:$pattern = '/[ti:.*].*?]/is';
preg_match_all($pattern, $str, $match);

echo '<pre>';
var_dump($match);
echo '</pre>';
打印的结果是:
array(1) {
  [0]=>
  array(5) {
    [0]=>
    string(10) "ti:霜华浓]"
    [1]=>
    string(8) ":小曲儿]"
    [2]=>
    string(2) ":]"
    [3]=>
    string(6) ":文超]"
    [4]=>
    string(14) "t_time:(3:47)]"
  }
}
然后我将正则改成:$pattern = '/\[ti:.*].*?]/is';
匹配出来的结果是:
array(1) {
  [0]=>
  array(1) {
    [0]=>
    string(51) "[ti:霜华浓][ar:小曲儿][al:][by:文超][t_time:(3:47)]"
  }我哪写错了吗?
正确的应该怎么写呢?谢谢!
}

解决方案 »

  1.   

    这个意思?
    $s = '[ti:霜华浓][ar:小曲儿][al:][by:文超]';
    preg_match_all('/\[[^]]+\]/', $s, $r);
    print_r($r[0]);Array
    (
        [0] => [ti:霜华浓]
        [1] => [ar:小曲儿]
        [2] => [al:]
        [3] => [by:文超]
    )
      

  2.   


    $str = '[ti:霜华浓][ar:小曲儿][al:][by:文超]';
    $pattern = '/\[(.*):(.*)\]/Uis';
    preg_match_all($pattern, $str, $match);
    foreach($match[1] as $k=>$v) {
        echo $v . ':' . $match[2][$k] . '<br/>';
    }
    /**
    输出结果:
    ti:霜华浓
    ar:小曲儿
    al:
    by:文超
    */
      

  3.   

    每天一堆正则贴, 改名为PCRE论坛.
    [User:root Time:14:37:36 Path:/home/liangdong/php]$ php preg.php 
    Array
    (
        [0] => Array
            (
                [0] => [ti:霜华浓]
                [1] => [ar:小曲儿]
                [2] => [al:]
                [3] => [by:文超]
            ))
    [User:root Time:14:37:38 Path:/home/liangdong/php]$ cat preg.php 
    <?php
    $str = <<<EOF
    [ti:霜华浓][ar:小曲儿][al:][by:文超]
    EOF;
    preg_match_all('/\[.*\]/U', $str, $matches);
    print_r($matches);
    ?>