düzenli ifade arama ve değiştirme

4 Cevap php
<br />  <br />  <br />   <br /> <br />  <br /> 

ancak

Ben değiştirmek istiyorum

<br /> fourth with <hr />

Ve bu çıkış

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

Lütfen bana yardımcı olun

4 Cevap

Belki de böyle bir şey ne istediğiniz:

<?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);


?>

Çıktı (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 

Yani bu bir ağrı olduğunu ve gerçekten bunun için regex kullanarak gerektiğini söyledi.


Eğer sadece bir değiştirme yapmak isterseniz, size limit bağımsız değişkeni ayarlayabilirsiniz preg_replace :

preg_replace("/($content(?:$tag$content){3})$tag/", '$1<BREAK! />', $text, 1);
                                                                          ^^limit

Bu yalnızca verilen durum için çalışacaktır:

preg_replace("#<br /> 4#", "<hr /> 4", $str);

Eğer genel bir çözüm arıyorsanız, RegEx is not the best tool Bunun için. HTML / XML ayrıştırıcı kullanın.

Bu özel durum için:

s/<br \/> 4/<hr \/> 4/

Regexpi kullanmaya gerek yoktur.

echo str_replace(' <br /> 4', ' <hr /> 4', $str);