我在包含HTML的锚中有title=""
属性。我试图完全删除title属性,但无论出于什么原因,我使用的preg替换都不起作用。我试过了:
$output = preg_replace( '/title=\"(.*?)\"/', '', $output );
$output = preg_replace( '/\title="(.*?)"/', '', $output );
$output = preg_replace( '` title="(.+)"`', '', $output );
以上都没有,但我可以使用类似的东西:
$output = str_replace( 'title', 'class', $output );
只是为了证明我能够做某事(而且我没有上传错误的文件或其他东西)。输出如下:
<a href="#" title="<table border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">
<tbody>
<tr>
<td colspan=\"2\" align=\"center\" valign=\"top\"></td>
</tr>
<tr>
<td valign=\"top\" width=\"50%\">
table content
</td>
<td valign=\"top\" width=\"50%\">
table content
</td>
</tr>
</tbody>
</table>">Link Title</a>
所以我要做的就是过滤$output
并完全删除title属性,包括title属性中的所有内容。为什么上面的preg_replace()
不起作用,我的选择是什么?
答案 0 :(得分:2)
我不使用正则表达式对[x] html进行操作,我会使用html解析器。
但是如果你仍然想使用正则表达式,那么你可以使用这样的正则表达式:
title="[\s\S]*?"
<强> Working demo 强>
您可以拥有以下代码:
$re = "/title=\"[\\s\\S]*?\"/";
$str = "<a href=\"#\" title=\"<table border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr>\n <td colspan=\"2\" align=\"center\" valign=\"top\"></td>\n </tr>\n <tr>\n <td valign=\"top\" width=\"50%\">\n table content\n </td>\n <td valign=\"top\" width=\"50%\">\n table content\n </td>\n </tr>\n </tbody>\n</table>\">Link Title</a>";
$subst = "";
$result = preg_replace($re, $subst, $str);
更新:您可以在 Andrei P. 评论
中看到一个明确的示例,说明为什么不应该使用正则表达式解析html