2010-09-22 58 views
2

我怎麼能拒絕這樣的:刪除每個<br />,每行除外?


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

進入這個使用PHP

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

請注意第一個和最後一個
的缺失,即使它提到一次。在中間,我們只保留一個

+2

[朋友不會讓朋友們解析HTML定期表達式。](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) – Ether 2010-09-22 21:46:43

+0

@Ether雖然我一般同意,這不是'真的解析HTML,只是擠壓重複的字符串。 – 2010-09-22 21:48:12

+0

@Daniel:從未見過'
'例如?
可以擁有各種各樣的屬性。 – Wrikken 2010-09-22 22:12:19

回答

9
preg_replace('#<br />(\s*<br />)+#', '<br />', $your_string); 

這將替換多個<br />的情況下,任選空格把它們分開,用一個單一的<br />

請注意模式中的<br />完全匹配。如果您想要更具防禦性,則可以將其更改爲<br[^>]*>,這將允許<br>具有屬性的標籤(即<br style="clear: both;" />)或不具有結尾斜槓。

1

首先,你應該編輯你的問題,因爲第一個<br />沒有出現。

然後更換所有重複<br />和第一個和最後一個,你可以這樣做:

$str = <<<EOD 
<br /> 
...<br /> 
<br /> 
...<br /> 
...<br /> 
<br /> 
<br /> 
...<br /> 
EOD; 

$str = preg_replace('~(^<br />\s*)|((?<=<br />)\s*<br />)|(<br />\s*$)~', '', $str); 
echo "===\n",$str,"\n===\n"; 

這將輸出:

=== 
...<br /> 
...<br /> 
...<br /> 
... 
=== 
相關問題