原来的字符串是:
$str='<table><tr><td>Transmission:<input type="text" value=T1/>----<select><option value="男">男</option><option value="女"  selected="selected">女</option></select></td></tr></table>';要得到的字符串是:
$str1='<table><tr><td>Transmission:T1----女</td></tr></table>';大家看看根据$str能不能得到$str1字符串?就是将input中的value值取出来,将select中选中的value取出来,替换掉原来的表单。

解决方案 »

  1.   

    $str=' <table> <tr> <td>Transmission: <input type="text" value=T1/>---- <select> <option value="男">男 </option> <option value="女"  selected="selected">女 </option> </select> </td> </tr> </table>'; 
    echo preg_replace("/.*value=([\w]+).*selected\">([^><\/]+)(.*)/ims"," <table> <tr> <td>Transmission:$1----$2</td> </tr> </table>", $str);
      

  2.   

    谢谢jakey9826
    因为$str里面的字符串是从数据库中获取的,里面的行数和table后面的参数不确定,所以输出的有错误。
      

  3.   

    这样写$str=' <table> <tr> <td>Transmission: <input type="text" value=T1/>---- <select> <option value="男">男 </option> <option value="女"  selected="selected">女 </option> </select> </td> </tr> </table>'; $ar = preg_split('/(<\/?.+>)/iU', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
    //print_r($ar);$k = 0;
    foreach($ar as $i=>$r) {
      if(strstr($r, 'option')) {
        $k++;
        if(strstr($r, 'selected')) $k++;
        unset($ar[$i]);
      }
      if($k == 1 || strstr($r, 'select')) unset($ar[$i]);
      if(strstr($r, '/option')) $k = 0;
    }//print_r($ar);echo join('', $ar); <table> <tr> <td>Transmission: <input type="text" value=T1/>----   女   </td> </tr> </table>
      

  4.   

    $str='<table> <tr> <td>Transmission: <input type="text" value=T1/>---- <select> <option value="男">男 </option> <option value="女"  selected="select">女 </option> </select> </td> </tr> </table>';
    echo preg_replace(
    array(
    '/<input[^>]*value\s*=\s*(\"|\')?(\w+)(\"|\')?[^>]*>/i'
       ,'/<select[^>]*>\s*<.*selected[^>]*>(.[^<]*)<.*\/select>/i'
    )
       ,array('$2','$1')
       ,$str
    );
      

  5.   

    //上面没考虑多行的情况,下面的还是有问题,就是你的option必须保证有某项为selected.
    $str='<table> <tr> <td>Transmission: <input type="text" value=T1/>---- <select> <option value="男">男 </option> <option value="女"  selected="select">女 </option> <option value="半男半女">半男半女 </option></select> </td> </tr><tr> <td>Transmission: <input type="text" value=T1/>---- <select> <option value="男">男 </option> <option value="女"  selected="select">女 </option> </select> </td> </tr> </table>';
    echo preg_replace(
    array(
    '/<input[^>]*value\s*=\s*(\"|\')?(\w+)(\"|\')?[^>]*>/i'
       ,'/<select.*selected([^>]*?)>([^<]*)<.*\/select>/iU'
       
    )
       ,array('$2','$2')
       ,$str
    );
      

  6.   

    可以保证select必有一个selected
    谢谢foolbirdflyfirst,实现的我要的效果,还要谢谢jakey9826和xuzuning
    我用这个功能在搞一个效果:
    产品有许多不同类型,每个类型的产品有相同的参数,不同类型的产品,参数是不同的,参数数量也不同。如果每个参数都要用一个字段,太多了,反正对这些参数不进行计算,所以我就直接将这些放到产品的一个字段中去了。我先将这些参数由后台放到产品类型中去,添加产品的时候,根据选择的产品类型,调用这些参数,让用户去填写,这些参数有文本框和下拉框。所以要在显示的时候去掉这些东西。
      

  7.   

    js只是将那些东西隐藏了,其实还在,所以想起来使用php去掉那些东西。