doy51723 2010-06-02 10:31
浏览 18
已采纳

正则表达式搜索和替换

This is some code

<br />  <br />  <br />   <br /> <br />  <br /> 

but

I want replace

<br /> fourth with <hr />

And this output

<br />  <br />  <br />   <hr />  <br />   <br /> 

Please help me

  • 写回答

4条回答 默认 最新

  • dqwh1218 2010-06-02 10:51
    关注

    Perhaps something like this is what you want:

    <?php
    
    $text = <<<EOT
    
    <br /> 1  <br /> 2 <br />  3  <br /> 4 <br /> 5  <br /> 6 
    <br /> 7  <br /> 8 <br />  9  <br /> 10 <br /> 11  <br /> 12 
    <br /> 13  <br /> 14 <br />  15  <br /> 16 <br /> 17  <br /> 18 
    
    EOT;
    
    $tag = '<br \\/>';
    $content = '[^<]*';
    print preg_replace("/($content(?:$tag$content){3})$tag/", '$1<BREAK! />', $text);
    
    
    ?>
    

    The output (as seen on ideone.com):

    <br /> 1  <br /> 2 <br />  3  <BREAK! /> 4 <br /> 5  <br /> 6 
    <br /> 7  <BREAK! /> 8 <br />  9  <br /> 10 <br /> 11  <BREAK! /> 12 
    <br /> 13  <br /> 14 <br />  15  <BREAK! /> 16 <br /> 17  <br /> 18 
    

    That said, this is a pain and you really shouldn't be using regex for this.


    If you only want to do one replacement, you can set the limit argument to preg_replace:

    preg_replace("/($content(?:$tag$content){3})$tag/", '$1<BREAK! />', $text, 1);
                                                                              ^^limit
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?