【发布时间】:2018-04-28 19:38:11
【问题描述】:
<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>
如果其中包含“Pricetoreplace”文本,我需要删除整个 <tr>....</tr> 行。
我试过了:
$content = preg_replace('~(<tr.*[\'"]Pricetoreplace[\'"].*tr>)~', '', $content);
但是没用。
【问题讨论】:
-
“它没有用”是什么意思?有错误吗?它没有删除任何东西吗?
-
你应该永远用正则表达式解析 HTML。请改用a PHP DOM parser。
-
@gtktuf 首先,您将替换从第一个实例到最后一个实例的所有内容
tr>所以您的正则表达式不会按照您的预期进行(您使用贪婪的量词.*惰性量词.*?)。其次,您的.不匹配换行符,您应该使用[\s\S]代替或打开s标志以将换行符与.字符匹配。不过,您甚至不应该为此使用正则表达式。 -
@gtktuf 你真的应该使用类似this question 的东西。
-
@gtktuf 是的。使用正则表达式解析 HTML 或 XML 通常是不好的做法。只有当它是已知子集时,Regex 才应该用于解析 HTML 或 XML。在你的情况下,它似乎并非如此。我建议您使用 HTML/XML 解析器并让它为您完成繁重的工作。