我需要从两个段落标记中提取内容并使用<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)."..."; ?>
答案 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)
它也有字符串截断正则表达式。