2009-10-27 38 views
0

我需要從兩個段落標記中提取內容,並使用<br />標記分解它。輸入是像這樣使用正則表達式查找*兩個* html標記

<p> 
Yay 
</p> 
<p> 
StackOverFlow 
</p> 

它需要像

<p> 
Yay <br /> 
StackOverflow 
</p> 

我至今是<p><?php preg_match('/<p>(.*)<\/p>/', $content, $match); echo($match[1])."..."; ?></p>從而牽引只有第一個段落標記:

<p> 
Yay... 
</p> 

此外,有可能設置字符限制?例如,兩個段落中最多有40個字符,或者我必須使用substr

謝謝!

所以這竟然是:

<?php $content = preg_replace('/<\/p>\s*<p>/', '<br/>', $content); echo substr("$content",0,180)."..."; ?> 
+3

爲什麼在地球上你需要做這樣的事情?這是一個諷刺。 – Welbog 2009-10-27 12:38:03

+0

除了不使用正則表達式進行HTML匹配,我建議你不要使用'。*'構造,這些構造是貪婪的,雖然它們可以做你希望他們在小樣本中做的事情,但他們會嘗試「吃」很多更多情況下,稍後再次找到匹配的結束模式。 – Lucero 2009-10-27 12:41:48

回答

4

我認爲你讓它變得比它需要的更復雜。既然你要崩潰了:

<p>Yay</p><p>StackOverFlow</p> 

到:

<p>Yay<br />StackOverflow</p> 

然後剛剛替補的</p><p>實例爲<br>preg_replace('/<\/p>\s*<p>/', '<br/>', $input)


但一般情況下,請注意這種複雜的分析過程是使用正則表達式是充滿了危險。更簡潔:

「有些人在遇到問題時想'我知道,我會用正則表達式'。現在他們有兩個問題。「 - Jamie Zawinski

+2

也許應該是'

\ s *

',看起來他們之間可能有換行符 – Kip 2009-10-27 12:44:25

+0

看看我的意思是充滿危險嗎? ;)感謝抓住,基普。 – 2009-10-27 13:05:35

+0

這是假設他想用
替換EVERY

。是這樣嗎? – Jay 2009-10-27 13:21:37

6

幫你一個忙,並使用HTML解析器(例如DOMDocument::loadHTML)。它更容易,更脆弱。