You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求PHP preg_replace正则:删除td标签内style的width与height属性

移除td标签内inline style中的width和height样式属性

解决方案代码

// 示例HTML内容
$html = '<td style="vertical-align: top; min-width: 30px; padding-right: 10px; height: 12px; width: 15px;" valign="top"></td>';

// 正则匹配模式
$pattern = '/(<td[^>]*style=")([^"]*?)(width:\s*[^;"]+;?\s*|height:\s*[^;"]+;?\s*)+([^"]*")/i';
$replacement = '$1$2$4';

// 循环替换彻底清除所有width/height样式
while (preg_match($pattern, $html)) {
    $html = preg_replace($pattern, $replacement, $html);
}

// 输出处理后的结果(用htmlspecialchars转义方便查看)
echo htmlspecialchars($html);

代码说明

  1. 正则逻辑拆解

    • <td[^>]*style=":精准定位td标签内的style属性起始部分,捕获为第1组,确保只作用于td标签
    • ([^"]*?):捕获style属性中width/height样式之前的所有合法内容,作为第2组
    • (width:\s*[^;"]+;?\s*|height:\s*[^;"]+;?\s*)+:匹配任意形式的width或height样式,包括:
      • 大小写不敏感(比如Width/HEIGHT)
      • 属性值前后的空格(比如width : 15px)
      • 结尾带或不带分号(比如width:15px或width:15px;)
    • ([^"]*"):捕获width/height样式之后到style属性结束引号前的内容,作为第4组
  2. 循环替换的必要性
    单次正则替换可能无法覆盖分散在style中的多个width/height样式,通过循环直到没有匹配项,确保彻底清除所有目标样式。

  3. 效果验证
    处理后示例HTML会变为:

    <td style="vertical-align: top; min-width: 30px; padding-right: 10px;" valign="top"></td>
    

    同时不会影响其他标签(如<div style="width:100px;"></div>中的width样式会被保留)

内容的提问来源于stack exchange,提问作者user451513

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 08:40:30