$p_preg = "/<p>.*<\/p>|<p>.*|.*<\/p>/";
 $arr = preg_match($p_preg,$htmlbody); 
 $temp = $arr[0]; 
 $arr[0] = $arr[7];
 $arr[7] = $temp;
 $htmlbody = implode($arr);
 echo $htmlbody;如上代码,$htmlbody是一个html文章的网页源代码(其中有很多段落<p>..</p>),我现在要把这整个$htmlbod按段落赋给数组,然后通过数组调换段落,再用implode()函数重新整合,实现文章段落换位,但是以上代码结果不对,请问各位该怎么写
注:我在其他地方问过,有人说把正则式子改成:$p_preg = "/\s*<p>.+?\s*<\/p>/s";这样改完后确实可以运行,但是它只能匹配完整写法的<p>..</p>,如果标签不完全就匹配不出段落,如:<p>...<p>..</p>或:...</p><p>..</p>,这几种情况就匹配不出,请问正则式子该怎么改

解决方案 »

  1.   

    $p_preg = "#</?p>.*</?p>#";   //完全按你意思来写
      

  2.   

    $htmlbody = <<< HTML
    如上代码,\$htmlbody是一个html文章的网页源代码(其中有很多段落 <p>.. </p>),我现在要把这整个$htmlbod按段落赋给数组,然后通过数组调换段落,再用implode()函数重新整合,实现文章段落换位,但是以上代码结果不对,请问各位该怎么写 
    注:我在其他地方问过,有人说把正则式子改成:$p_preg = "/\s* <p>.+?\s* <\/p>/s";这样改完后确实可以运行,但是它只能匹配完整写法的 <p>.. </p>,如果标签不完全就匹配不出段落,如: <p>... <p>.. </p>或:... </p> <p>.. </p>,这几种情况就匹配不出,请问正则式子该怎么改
    HTML;$p_preg = "/(<\/?p>)/"; 
    $arr = preg_split($p_preg, $htmlbody, -1, PREG_SPLIT_DELIM_CAPTURE); 
    print_r($arr);得:
    Array
    (
        [0] => 如上代码,$htmlbody是一个html文章的网页源代码(其中有很多段落 
        [1] => <p>
        [2] => .. 
        [3] => </p>
        [4] => ),我现在要把这整个()函数重新整合,实现文章段落换位,但是以上代码结果不对,请问各位该怎么写 
    注:我在其他地方问过,有人说把正则式子改成: = "/\s* 
        [5] => <p>
        [6] => .+?\s* <\/p>/s";这样改完后确实可以运行,但是它只能匹配完整写法的 
        [7] => <p>
        [8] => .. 
        [9] => </p>
        [10] => ,如果标签不完全就匹配不出段落,如: 
        [11] => <p>
        [12] => ... 
        [13] => <p>
        [14] => .. 
        [15] => </p>
        [16] => 或:... 
        [17] => </p>
        [18] =>  
        [19] => <p>
        [20] => .. 
        [21] => </p>
        [22] => ,这几种情况就匹配不出,请问正则式子该怎么改
    )后续工作自己看着办
      

  3.   

    $htmlbody=<<<HTML
    <p>如上代码,\$htmlbody是一个html文章的网页源代码(其中有很多段落 .. </p>),我现在要把这整个</p>htmlbod按段落赋给数组,然后通过数组调换段落,再用<p>implode()函数重新整合,实现文章段落换位,但是以上代码结果不对,请问各位该怎么写 
    注:我在其他地方问<p>过,有人说把正则式子</p改成:<[>这样改完后确实可以运行,但是它只能匹配完整写法的 <p>.. </p>,如果标签不完全就匹配不出段落,如: <p>.. >或:... </p> <p>.. </p>,这几种情况就匹配不出,请问正则式子该怎么改 
    HTML;$arr = preg_split('/<\/?p>/', $htmlbody);
    echo '<pre>';
    print_r($arr);
    echo '</pre>';
    Array
    (
        [0] => 
        [1] => 如上代码,$htmlbody是一个html文章的网页源代码(其中有很多段落 .. 
        [2] => ),我现在要把这整个
        [3] => htmlbod按段落赋给数组,然后通过数组调换段落,再用
        [4] => implode()函数重新整合,实现文章段落换位,但是以上代码结果不对,请问各位该怎么写 
    注:我在其他地方问
        [5] => 过,有人说把正则式子<[>这样改完后确实可以运行,但是它只能匹配完整写法的 
        [6] => .. 
        [7] => ,如果标签不完全就匹配不出段落,如: 
        [8] => .. >或:... 
        [9] =>  
        [10] => .. 
        [11] => ,这几种情况就匹配不出,请问正则式子该怎么改 
    )