[^\>]+ 匹配任意非“>”的字符
用.+的话会把>以及>右边的都匹配进去了

解决方案 »

  1.   

    <?php
    $str='
    <a href=/x_43b2&c893> 无完整引号
    <a href="/x_43b2c893" > 有完整引号<a href=/x_43b2c893 target=_blank> 包含其他已知属性 且 无完整引号
    <a href=/x_43b2c893 target="_blank"> 包含其他已知属性 且 有完整引号<a href="/x_43b2c893" class=aLink > 包含其他未知属性 且 无完整引号 
    <a href="/x_43b2c893" class="aLink" > 包含其他未知属性 且 有整引号<a href=/x_43b2c893" class=aLink" > 包含其他未知属性 且 单面引号
    <a href="/x_43b2c893 class=aLink" > 包含其他未知属性 且 单面引号
    ';
    echo preg_replace('/(href|target|[a-z])=([\"\']*)([^>"\'\s]+)[\s]*([\"\']*)/i','$1="\\3" ',$str);
    ?>
    相关帖子:
    http://topic.csdn.net/u/20080411/09/16ea750b-c5ca-4573-93ae-5b8f330d782c.html