2010-06-02 124 views
2

這是一些代碼正則表達式搜索和替換

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

我想更換

<br /> fourth with <hr /> 

而這種輸出

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

請幫我

+0

你的問題是難以理解的,請解釋一下你想要做什麼。並顯示你到目前爲止。 – SilentGhost 2010-06-02 10:39:04

+0

我想在不同的位置替換相似的主題短語 – Thoman 2010-06-02 10:48:57

+0

正如Amarghosh在下面所說的,最好的辦法是使用HTML/DOM解析器而不是正則表達式。 – richsage 2010-06-02 11:01:25

回答

1

也許這樣的事情是你想要什麼:

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


?> 

輸出(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 

也就是說,這是一個痛苦,你真的不應該使用正則表達式。


如果你只想做一個替換,您可以將limit參數設置爲preg_replace

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

感謝您的回覆 但我想只替換一個位置。 – Thoman 2010-06-02 10:58:53

+0

@Thoman:'preg_replace'有一個'limit'參數;只需將其設置爲「1」(http://ideone.com/HKpjj) – polygenelubricants 2010-06-02 11:03:19

+0

非常感謝您的幫助 – Thoman 2010-06-02 11:07:20

0

對於這個特定的情況下:

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

你好,我編輯了我的代碼 – Thoman 2010-06-02 10:43:49

1

這種方法僅對於給定的情況下:

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

如果你正在尋找一個通用的解決方案,RegEx is not the best tool了點。使用HTML/XML解析器。

+0

你好,我已經編輯我的代碼 – Thoman 2010-06-02 10:44:08

0

沒有必要使用正則表達式。

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