使用正则表达式查找*两个* html标记

时间:2009-10-27 12:34:11

标签: php regex

我需要从两个段落标记中提取内容并使用<br />标记将其分解。输入就像这样

<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 个答案:

答案 0 :(得分:6)

帮自己一个忙,并使用HTML解析器(例如DOMDocument::loadHTML)。它更容易,也不那么脆弱。

答案 1 :(得分:4)

我认为你使它变得比它需要的更复杂。鉴于你想要崩溃:

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

成:

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

然后只需将</p><p>的实例替换为<br>preg_replace('/<\/p>\s*<p>/', '<br/>', $input)


但是,一般情况下,请注意,使用正则表达式进行此类复杂的解析会带来危险。更简洁:

  

“有些人在遇到问题时会想,'我知道,我会用正则表达式'。”现在他们有两个问题。“    - 杰米·扎温斯基

答案 2 :(得分:0)

我的建议,正则表达式只能走到这一步。在这里查看我的一个帖子: Extracting text fragment from a HTML body (in .NET)

它也有字符串截断正则表达式。