try:
$text=str_replace("=", ":", str_replace("|", " ", preg_replace("/\[code=js\?(.*?)]/","\\1",$text)));

解决方案 »

  1.   

    不知道你想干什么?
    统一写成这样不行吗?
    $text="[code=js&num=10&long=40&rows=2]";
    $text="[code=js&num=10&long=40&";
    $text="[code=js&long=40&rows=2&num=10]";
      

  2.   

    TO:fristfly(再来, 再来)
    谢谢你。你的这个可以 得出 num:10 long:40 rows:2,但是我没有办法将num,long,rows这些作为变量来使用,
    TO:xuzuning(唠叨) 
    我想做标签,就麻烦你帮帮忙了。
    统一写我觉得不是很可行,因为标签不止这一种。
    比如 [code=js]除了上面那几种外,还有:
    [code=js&rows=2&num=10&long=40]
    [code=js&sort=new&rows=2&num=10&long=40&skin=1&img=yes&offset=1] ...
    等等,可以我希望这些标签可以自由组合.
      

  3.   

    不使用正则的方法
    =================================
    <?php$text="[code=js?num=10|long=40|rows=2]";print_r(getTagVars($text));function getTagVars( $tag )
    {
    $tagVars = array();
    $main = substr( $tag, 1, strlen( $tag ) - 2 );
    $main = str_replace( "?", "|", $main ); //如不使用?则可省去这步
    $pairs= explode( "|", $main );
    while( list( , $pair ) = each( $pairs ) )
    {
    $kv = explode( "=", $pair );
    $tagVars[$kv[0]] = $kv[1];
    }
    return $tagVars;
    }
    ?>