比如文章如下
<p>1111111</p>
<p>2222222</p>
<p>33333333</p>
<p>4444444</p>
<p>55555555</p>
<p>66666666</p>
<p>7777777</p>匹配出<p>1111111</p>中的</p>
和最后一段<p>7777777</p>的</p>
正则如何弄?

解决方案 »

  1.   

    preg_match_all('/^<p>.+<\/p>|<p>.+<\/p>$/U',$s,$m);
      

  2.   

    这样匹配到的是整一段了
    我要的只是一个</p>
      

  3.   

    preg_match_all('/^<p>.+(<\/p>)|<p>.+(<\/p>)$/U',$s,$m); 
      

  4.   

    $s =<<< TXT
    <p>1111111</p>
    <p>2222222</p>
    <p>33333333</p>
    <p>4444444</p>
    <p>55555555</p>
    <p>66666666</p>
    <p>7777777</p>
    TXT;
    preg_match('#(</p>).+(</p>)#s', $s, $r);
    print_r($r);Array
    (
        [0] => </p>
    <p>2222222</p>
    <p>33333333</p>
    <p>4444444</p>
    <p>55555555</p>
    <p>66666666</p>
    <p>7777777</p>
        [1] => </p>
        [2] => </p>
    )
      

  5.   

    如果只是想要匹配</p>的话,可以不用正则吧。
    PHP5,现在应该没有谁用PHP4吧$str = '<p>1111111</p>
    <p>2222222</p>
    <p>33333333</p>
    <p>4444444</p>
    <p>55555555</p>
    <p>66666666</p>
    <p>7777777</p>';
    $fp = stripos($str, '</p>');
    $first = substr($str, $fp, 4);
    $ep = stripos($str, '</p>');
    $end = substr($str, $ep, 4);
      

  6.   

    别用正则了<?php 
    $s='<p>1111111</p>
    <p>2222222</p>
    <p>33333333</p>
    <p>4444444</p>
    <p>55555555</p>
    <p>66666666</p>
    <p>7777777</p>';
    print strlen($s);
    print stripos($s,'</p>');
    print strripos($s,'</p>');
    ?>运行结果:
    113
    10
    109
      

  7.   


    写错了,$ep = strripos($str, '</p>');
    楼上兄弟和我想一样了
      

  8.   


    写错了,$ep = strripos($str, '</p>');
    楼上兄弟和我想一样了
    其实我是要第一段的后面追加一些文字、和最后一段也追加一些文字
      

  9.   

    $s =<<< TXT
    <p>1111111</p>
    <p>2222222</p>
    <p>33333333</p>
    <p>4444444</p>
    <p>55555555</p>
    <p>66666666</p>
    <p>7777777</p>
    TXT;
    echo preg_replace('#(</p>)(.+)(</p>)#s', '$1aaa$2$3BBB', $s);
    <p>1111111</p>aaa
    <p>2222222</p>
    <p>33333333</p>
    <p>4444444</p>
    <p>55555555</p>
    <p>66666666</p>
    <p>7777777</p>BBB写错了,$ep = strripos($str, '</p>');
    楼上兄弟和我想一样了
    其实我是要第一段的后面追加一些文字、和最后一段也追加一些文字
      

  10.   


    写错了,$ep = strripos($str, '</p>');
    楼上兄弟和我想一样了
    其实我是要第一段的后面追加一些文字、和最后一段也追加一些文字
    也可以使用这种啊,得出了两个'</p>'的位置,在把字符切一下再加上你要加的文字。
    不过如果字符串本身很大的话,这个效率不怎么样。
      

  11.   


    写错了,$ep = strripos($str, '</p>');
    楼上兄弟和我想一样了
    其实我是要第一段的后面追加一些文字、和最后一段也追加一些文字
    也可以使用这种啊,得出了两个'</p>'的位置,在把字符切一下再加上你要加的文字。
    不过如果字符串本身很大的话,这个效率不怎么样。不用切,找出位置直接替换就可以<?php 
    $s='<p>1111111</p>
    <p>2222222</p>
    <p>33333333</p>
    <p>4444444</p>
    <p>55555555</p>
    <p>66666666</p>
    <p>7777777</p>';
    print strlen($s);$find = '</p>';
    $find_len = 4; //</p> 长度$s = substr_replace($s, $find."第一个p", stripos($s,'</p>'), $find_len);
    $s = substr_replace($s, $find."最后一个p", strripos($s,'</p>'), $find_len);print $s;
      

  12.   


    写错了,$ep = strripos($str, '</p>');
    楼上兄弟和我想一样了
    其实我是要第一段的后面追加一些文字、和最后一段也追加一些文字
    也可以使用这种啊,得出了两个'</p>'的位置,在把字符切一下再加上你要加的文字。
    不过如果字符串本身很大的话,这个效率不怎么样。不用切,找出位置直接替换就可以<?php 
    $s='<p>1111111</p>
    <p>2222222</p>
    <p>33333333</p>
    <p>4444444</p>
    <p>55555555</p>
    <p>66666666</p>
    <p>7777777</p>';
    print strlen($s);$find = '</p>';
    $find_len = 4; //</p> 长度$s = substr_replace($s, $find."第一个p", stripos($s,'</p>'), $find_len);
    $s = substr_replace($s, $find."最后一个p", strripos($s,'</p>'), $find_len);print $s;

    这个可以