Php 如果HTML标记包含特定字符串,如何删除它 Sometext 普莱斯酒店
我需要删除整个Php 如果HTML标记包含特定字符串,如何删除它 Sometext 普莱斯酒店,php,html,regex,dom,tags,Php,Html,Regex,Dom,Tags,我需要删除整个…行,如果其中包含“Pricetoreplace”文本。 我试过下一步: <tr> <td width="300" bgcolor="#cccccc" style="text-align: right;"> <strong> Sometext<br /> </strong> </td&
…
行,如果其中包含“Pricetoreplace”文本。
我试过下一步:
<tr>
<td width="300" bgcolor="#cccccc" style="text-align: right;">
<strong> Sometext<br />
</strong>
</td>
<td width="125" bgcolor="#009900" style="text-align: center;">
<strong><span style="color: rgb(255, 255, 255);">
<span style="font-size: larger;">Pricetoreplace</span>
</span>
</strong>
</td>
</tr>
$content=preg_replace(“~”(一种方法是使用xpath
查询:
$content = preg_replace('~(<tr.*[\'"]Pricetoreplace[\'"].*tr>)~', '', $content);
在这里,我们查找td
,其中text()
属性包含Pricetoreplace
,然后查找相应的父级tr
。后者将从DOM
中删除
在PHP
中:
*//td[contains(., 'Pricetoreplace')]/parent::tr
你说“它不工作”是什么意思?有错误吗?它没有删除任何内容吗?你不应该用正则表达式解析HTML。请改用它。@gtktuf首先,你要替换从第一个实例到最后一个tr>
的所有内容,这样你的正则表达式就不会像你期望的那样工作(您使用贪婪量词*
而不是惰性量词*?
)。其次,您的
与新行字符不匹配,您应该使用[\s\s]
,或者打开s
标志,将换行符与
字符匹配。不过,同样,您甚至不应该使用正则表达式来进行此操作。@gtktuf您确实应该使用类似问题的方法。@gtktuf是的。使用正则表达式解析HTML或XML通常是不好的做法。正则表达式应该只用于解析HTML或XML,如果它是已知的子集。在您的情况下,它似乎不是这样。我建议您使用HTML/XML解析器,让它为您完成繁重的工作。这就是答案,但在我的情况下,我需要替换:$dom->loadHTML(
$dom->loadHTML(mb\u convert\u编码)($content,'HTML-ENTITIES','UTF-8');
来解决编码方面的一些问题。而且在整个帖子中没有类似于:class=“some other class”
的类,我需要用这个php脚本重建它,这是这个方法的主要问题。Ty。@gtktuf:很高兴能提供帮助。
<?php
$html = <<<DATA
<tr><td class="some other class">some text here</td></tr>
<tr>
<td width="300" bgcolor="#cccccc" style="text-align: right;">
<strong> Sometext<br />
</strong>
</td>
<td width="125" bgcolor="#009900" style="text-align: center;">
<strong><span style="color: rgb(255, 255, 255);">
<span style="font-size: larger;">Pricetoreplace</span>
</span>
</strong>
</td>
</tr>
DATA;
# set up the DOM
$dom = new DOMDocument();
$dom->loadHTML($html, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);
# set up the xpath
$xpath = new DOMXPath($dom);
foreach ($xpath->query("*//td[contains(., 'Pricetoreplace')]/parent::tr") as $row) {
$row->parentNode->removeChild($row);
}
echo $dom->saveHTML();
?>
<tr><td class="some other class">some text here</td></tr>