<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; line-height: 15pt; text-align: left"align="left">谢谢</p>
我需要的是求个正则能把上面的匹配成 :
<p style="MARGIN: 0cm 0cm 0pt; line-height: 15pt; text-align: left">谢谢</p>
应该怎么写.

解决方案 »

  1.   


    <?php
    $str = '<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; line-height: 15pt; text-align: left"align="left">谢谢</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; line-height: 15pt; text-align: left"align="left">谢谢</p>';
    $pattern = "/<\w+\s*|style\s*=\s*\".*?\"|>[^<]*?<\/\w+>/i";preg_match_all($pattern, $str, $match);
    print_r($match);
    $result = '';
    if(isset($match[0])) {

    for($i=0; $i<count($match[0]); $i+=3) {

    echo $match[0][$i] . $match[0][$i+1] . $match[0][$i+2] . "\n";
    }
    }
    ?>
      

  2.   


    $str=<<<EOD
    <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; line-height: 11pt; color:red; text-align: left"align="left">aaaaaaaaa</p>
        <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; line-height: 12pt; color:red; text-align: left"align="left">bbbbbbbbbbbbbbbbb</p>
        <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; line-height: 13pt; color:red; text-align: left"align="left">cccccccccccccc</p>
    EOD;preg_match_all('/<p.*(style=[\'"][^"\']*[\'"]).*>([\d\D]*)<\/p>/iU',$str,$match);foreach($match[1] as $key=>$value) {
        echo '<p '.$value.'>'.$match[2][$key].'</p>';
    }
      

  3.   

    //单独这一句用preg_match_all 就可以了。
    <?php 
    $str1 = '<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; line-height: 15pt; text-align: left"align="left">thanks</p>';
    preg_match_all("/<p(?!style)([\d\D]*)style=\"([^\"]*)\"[^>]*>([\d\D]*)<\/p>/iU",$str1,$match);$style_info = $match[2][0];
    $title_info = $match[3][0];
    $new_str = '<p styel="'.$style_info.'">'.$title_info.'</p>';
    echo $new_str;?>
    如果是需要把一整段内容里面嵌入的'<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; line-height: 15pt; text-align: left"align="left">谢谢</p>进行替换的话,
    请用preg_replace_callback 来处理。
      

  4.   

    还是直接提供代码好了,怕说不清楚。
    代码已经过调试,可以直接使用.$str1 = '11111111111111<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; line-height: 15pt; text-align: left"align="left">test of p1</p>222222222<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; line-height: 15pt; text-align: left"align="left">test of p2</p>333333';
    preg_match_all("/<p(?!style)([\d\D]*)style=\"([^\"]*)\"[^>]*>([\d\D]*)<\/p>/iU",$str1,$match);
     $line = preg_replace_callback(
              "/<p(?!style)([\d\D]*)style=\"([^\"]*)\"[^>]*>([\d\D]*)<\/p>/iU",
              create_function(
                 '$matches',
                  'return "<p styel= \"$matches[2]\">$matches[3]</p>";'
              ),
              $str1
     );
    echo $line;