PHP-如何从一行中的多个p标记获取文本
我有一个包含一些html的变量。在html中,有几个相邻的p标记。我想从这些p标签中检索文本,将它们格式化为1个段落,并将这个新段落设置为一个新变量。这有意义吗PHP-如何从一行中的多个p标记获取文本,php,regex,preg-replace,Php,Regex,Preg Replace,我有一个包含一些html的变量。在html中,有几个相邻的p标记。我想从这些p标签中检索文本,将它们格式化为1个段落,并将这个新段落设置为一个新变量。这有意义吗 <h2></h2> <p>date</p> <ul></ul> <iframe></iframe> <p>apple</p> <p>banana</p> <p>grape</p
<h2></h2>
<p>date</p>
<ul></ul>
<iframe></iframe>
<p>apple</p>
<p>banana</p>
<p>grape</p>
<ul></ul>
日期
苹果
香蕉
葡萄
变成:
<p>apple banana grape</p>
苹果香蕉葡萄
注意:html中的元素可能会有所不同。例如,没有iframe。某处的图像等。示例:
$html = '<h2></h2>
<p>date</p>
<ul></ul>
<iframe></iframe>
<p>apple</p>
<p>banana</p>
<p>grape</p>
<ul></ul>';
if (preg_match_all('~<p>(?P<paragraphs>.*?)</p>~is', $html, $matches)) {
print_r($matches['paragraphs']);
}
附言。
“聪明的”投反对票的人你能评论一下你为什么要投反对票吗?:()()()()()()()40强>
p.p.S
为两位投票被否决者制作的特别版:
$document = new DOMDocument();
$document->loadHTML($html);
$paragraphs = $document->getElementsByTagName('p');
$result = array();
foreach ($paragraphs as $paragraph) {
$result[] = $paragraph->nodeValue;
}
print_r($result);
例如:
$html = '<h2></h2>
<p>date</p>
<ul></ul>
<iframe></iframe>
<p>apple</p>
<p>banana</p>
<p>grape</p>
<ul></ul>';
if (preg_match_all('~<p>(?P<paragraphs>.*?)</p>~is', $html, $matches)) {
print_r($matches['paragraphs']);
}
附言。
“聪明的”投反对票的人你能评论一下你为什么要投反对票吗?:()()()()()()()40强>
p.p.S
为两位投票被否决者制作的特别版:
$document = new DOMDocument();
$document->loadHTML($html);
$paragraphs = $document->getElementsByTagName('p');
$result = array();
foreach ($paragraphs as $paragraph) {
$result[] = $paragraph->nodeValue;
}
print_r($result);
您可以使用Xpath来实现这一点
$html = '<h2></h2>
<p>date</p>
<ul></ul>
<iframe></iframe>
<p>apple</p>
<p>banana</p>
<p>grape</p>
<ul></ul>';
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXpath($doc);
$elements = $xpath->query("//p");
foreach ($elements as $node){
echo $node->nodeValue. "<br/>";
}
$html='1!'
日期
苹果
香蕉
葡萄
”;
$doc=新的DOMDocument();
$doc->loadHTML($html);
$xpath=新的DOMXpath($doc);
$elements=$xpath->query(“//p”);
foreach($元素作为$node){
echo$node->nodeValue。“
”;
}
您可以使用Xpath来实现这一点
$html = '<h2></h2>
<p>date</p>
<ul></ul>
<iframe></iframe>
<p>apple</p>
<p>banana</p>
<p>grape</p>
<ul></ul>';
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXpath($doc);
$elements = $xpath->query("//p");
foreach ($elements as $node){
echo $node->nodeValue. "<br/>";
}
$html='1!'
日期
苹果
香蕉
葡萄
”;
$doc=新的DOMDocument();
$doc->loadHTML($html);
$xpath=新的DOMXpath($doc);
$elements=$xpath->query(“//p”);
foreach($元素作为$node){
echo$node->nodeValue。“
”;
}
我明白了,您可以使用@orourkrk删除HTML标记。我的php知识是有限的,因为我是一个字体端程序员,但我已经开始学习php。你链接到的页面有几个建议,而不是正则表达式,你能建议其中哪一个是我的案例的首选解决方案吗?我明白了,你可以用@orourkrk删除HTML标记。我的php知识是有限的,因为我是一个字体端程序员,但我已经开始学习php。你链接到的页面有几个建议,而不是正则表达式,你能建议其中哪一个是我的案例的首选解决方案吗?我感觉有人将要发布这个链接,并评论“不要用正则表达式解析HTML”。。。使用DOMDocument可能是一种更好的方法是的,的确如此我贴了一个和你的答案很相似的帖子,结果被炒了鱿鱼!我有一种感觉,有人将要发布这个带有评论的链接“不要用正则表达式解析HTML”。。。使用DOMDocument可能是一种更好的方法是的,的确如此我贴了一个和你的答案很相似的帖子,结果被炒了鱿鱼!