$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
);这段代码是正确的,是我要的结果。现在客户在输入的时候,<input type="text" value="T1"/>这里面已经不是T1了,而是<input type="text" value="T1 200 e"/>,得到的结果仍然是T1,麻烦大家帮我看看,如何修改一下,能得到 T1 200 e 这三个?

解决方案 »

  1.   

    echo preg_replace( 
        array( 
            '/ <input[^>]*value\s*=\s*(\"|\')?([ \w]+)(\"|\')?[^>]*>/i' 
          ,'/ <select.*selected([^>]*?)>([^ <]*) <.*\/select>/iU' 
          
        ) 
      ,array('$2','$2') 
      ,$str 
    ); 
      

  2.   

    谢谢
    如果value后面是T1 2009-5-06 E又不行了,可否直接获取value里面的所有值,里面任何字符都可以,包括标点符号
      

  3.   

     '/ <input[^>]*value\s*=\s*(\"|\')?(.+)(\"|\')?[^>]*>/i'