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

如何修改正则以获取XML中带属性的标签并展示为表格?

XML标签(含属性)提取的正则修正方案

你的原有正则无法正确处理带属性的标签,核心问题是未明确区分标签名、属性和内容,也没通过反向引用确保闭合标签与起始标签匹配。以下是修正方案:

修正后的正则表达式

preg_match_all('|<([a-zA-Z0-9_-]+)([^>]*)>(.*?)</\1>|sU', $content, $matches, PREG_SET_ORDER);

正则各部分说明

  • <([a-zA-Z0-9_-]+):捕获合法XML标签名,支持字母、数字、下划线和短横线
  • ([^>]*):捕获标签内的所有属性(无属性时返回空字符串)
  • >(.*?)</\1>:捕获标签内容,\1反向引用起始标签名,确保闭合标签匹配;s修饰符让.匹配换行符,U启用非贪婪模式避免跨标签匹配

示例代码(生成表格展示)

假设XML内容如下:

<book id="bk101">
  <title>XML Developer's Guide</title>
  <author>Gambardella, Matthew</author>
</book>
<book id="bk102">
  <title>Midnight Rain</title>
  <author>Ralls, Kim</author>
</book>

处理并生成表格的代码:

// 输出表格
echo "<table border='1'>
        <tr>
          <th>标签名</th>
          <th>属性</th>
          <th>内容</th>
        </tr>";

foreach ($matches as $match) {
    // 转义特殊字符避免XSS
    $tagName = htmlspecialchars($match[1]);
    $attributes = htmlspecialchars(trim($match[2]));
    $content = htmlspecialchars(trim($match[3]));
    
    echo "<tr>
            <td>$tagName</td>
            <td>$attributes</td>
            <td>$content</td>
          </tr>";
}

echo "</table>";

注意事项

  • 正则仅适合结构简单的XML文档,若遇到嵌套层级深、含CDATA块、命名空间或自闭合标签的复杂XML,建议使用PHP原生的DOMDocument或SimpleXML扩展,这类工具能更可靠地解析XML结构,避免正则的局限性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:40:26