<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>
我需要删除整个<tr>....</tr>
行,如果它包含“Pricetoreplace”文本。
我接下来试过了:
$content = preg_replace('~(<tr.*[\'"]Pricetoreplace[\'"].*tr>)~', '', $content);
但它没有用。
答案 0 :(得分:2)
一种方法是使用xpath
查询:
*//td[contains(., 'Pricetoreplace')]/parent::tr
在此,我们会查找td
text()
属性包含Pricetoreplace
的{{1}},然后查找相应的父tr
。后者将从DOM
中删除。
<小时/> 在
PHP
:
<?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>