$str = "html='<a id=\'test\'>hello,world</a>', name='jiang, lin', year=12, x1=3, mb='slink', mx='hiang'";如何将其中的值分离成下面的键值对:
html='<a id=\'test\'>hello,world</a>'
name='jiang, lin'
year=12
x1=3
mb='slink'
mx='hiang'谢谢各位不吝赐教

解决方案 »

  1.   

    $str = "html='<a id=\'test\'>hello,world</a>', name='jiang, lin', year=12, x1=3, mb='slink', mx='hiang'";$ch = ', ';
    $r = array();
    $t = '';
    foreach(explode($ch, $str) as $v) {
      if(substr_count($t, "'")%2) {
        $t .= $ch.$v;
        continue;
      }
      if($t) $r[] = $t;
      $t = $v;
    }
    if($t) $r[] = $t;print_r($r);Array
    (
        [0] => html='<a id=\'test\'>hello,world</a>'
        [1] => name='jiang, lin'
        [2] => year=12
        [3] => x1=3
        [4] => mb='slink'
        [5] => mx='hiang'
    )
      

  2.   


    $str = "html='<a id=\'test\'>hello,world</a>', name='jiang, lin', year=12, x1=3, mb='slink', mx='hiang'";
    preg_replace("/([\w]+)=(.*?)(?=(,\s*[\w]+=|$))/ie", "\$arr['\\1']='\\2'", $str);
    print_r($arr);
    /*
    Array
    (
        [html] => '<a id=\'test\'>hello,world</a>'
        [name] => 'jiang, lin'
        [year] => 12
        [x1] => 3
        [mb] => 'slink'
        [mx] => 'hiang'
    )*/
      

  3.   

    或者不要'
    $str = "html='<a id=\'test\'>hello,world</a>', name='jiang, lin', year=12, x1=3, mb='slink', mx='hiang'";
    preg_replace("/([\w]+)=([']?)(.*?)\\2(?=(,\s*[\w]+=|$))/ie", "\$arr['\\1']='\\3'", $str);
    print_r($arr);
    /*Array
    (
        [html] => <a id=\'test\'>hello,world</a>
        [name] => jiang, lin
        [year] => 12
        [x1] => 3
        [mb] => slink
        [mx] => hiang
    )*/
      

  4.   

    $str=preg_replace("/, (?=\w+=)/",'&',$str);
    parse_str($str,$ar);
    print_r($ar);
    Array
    (
        [html] => '<a id=\'test\'>hello,world</a>'
        [name] => 'jiang, lin'
        [year] => 12
        [x1] => 3
        [mb] => 'slink'
        [mx] => 'hiang'
    )
      

  5.   

    [User:root Time:12:28:25 Path:/home/liangdong/php]$ cat preg.php 
    <?php
    $str = "html='<a id=\'test\'>hello,world</a>', name='jiang, lin', year=12, x1=3, mb='slink', mx='hiang'";
    $nmatches = preg_match_all("/\w*='.*(?<!\\\\)'/iUs", $str, $matches);
    print_r($matches[0]);
    ?>
    [User:root Time:12:28:26 Path:/home/liangdong/php]$ php preg.php 
    Array
    (
        [0] => html='<a id=\'test\'>hello,world</a>'
        [1] => name='jiang, lin'
        [2] => mb='slink'
        [3] => mx='hiang'
    )
      

  6.   

    呀, year那里怎么没有''了。
      

  7.   

    [User:root Time:13:03:26 Path:/home/liangdong/php]$ php preg.php
    Array
    (
        [0] => html='<a id=\'test\'>hello,world</a>'
        [1] => name='jiang, lin'
        [2] => year=1
        [3] => x1=3
        [4] => mb='slink'
        [5] => mx='hiang'
    )
    [User:root Time:13:03:28 Path:/home/liangdong/php]$ cat preg.php 
    <?php
    $str = "html='<a id=\'test\'>hello,world</a>', name='jiang, lin', year=12, x1=3, mb='slink', mx='hiang'";
    $nmatches = preg_match_all("/\w*=('.*(?<!\\\\)'|\d+)/iUs", $str, $matches);
    print_r($matches[0]);
    ?>