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>&nbsp;&nbsp;&nbsp;Sometext<br /> </strong> </td&

我需要删除整个
行,如果其中包含“Pricetoreplace”文本。 我试过下一步:

    <tr>
        <td width="300" bgcolor="#cccccc" style="text-align: right;">
         <strong>&nbsp;&nbsp;&nbsp;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>&nbsp;&nbsp;&nbsp;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>