使用正则表达式查找*两个* html标记
问题描述:
我需要从两个段落标记中提取内容,并使用<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)."..."; ?>
答
我认为你让它变得比它需要的更复杂。既然你要崩溃了:
<p>Yay</p><p>StackOverFlow</p>
到:
<p>Yay<br />StackOverflow</p>
然后刚刚替补的</p><p>
实例为<br>
:preg_replace('/<\/p>\s*<p>/', '<br/>', $input)
。
但一般情况下,请注意这种复杂的分析过程是使用正则表达式是充满了危险。更简洁:
“有些人在遇到问题时想'我知道,我会用正则表达式'。现在他们有两个问题。“ - Jamie Zawinski
答
帮你一个忙,并使用HTML解析器(例如DOMDocument::loadHTML
)。它更容易,更脆弱。
为什么在地球上你需要做这样的事情?这是一个讽刺。 – Welbog 2009-10-27 12:38:03
除了不使用正则表达式进行HTML匹配,我建议你不要使用'。*'构造,这些构造是贪婪的,虽然它们可以做你希望他们在小样本中做的事情,但他们会尝试“吃”很多更多情况下,稍后再次找到匹配的结束模式。 – Lucero 2009-10-27 12:41:48