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

如何用正则捕获第三方XML中的未闭合CDATA标签?

问题背景

从第三方获取的XML存在CDATA标签未闭合的格式错误,需要编写正则表达式仅捕获这类错误的CDATA。当前使用的正则在未闭合CDATA的场景中有效,但当CDATA内容包含HTML标签时会出现假阳性误判。

当前使用的正则

((<{1}[a-zA-Z-_]*>{1}){1}(<!\[CDATA\[){1}((?!]]>).)*((</){1}[a-zA-Z-_]*>{1}){1})

测试用例

未闭合CDATA的错误场景

<Couleur_regroupement>
   <![CDATA[Rose;Jaune 
</Couleur_regroupement>
<Dessus_Tige>
   <![CDATA[26]]>
</Dessus_Tige>

含HTML内容的正常CDATA场景(不应被误判)

<Desart>
    <![CDATA[Title<br><img src=img.jpg> blabla <i>bla</i>  blabla<br><img src=img.jpg></br>
    ]]>
</Desart>

修正后的正则表达式
<([a-zA-Z-_]+)>\s*<!\[CDATA\[(?:(?!]]>).)*?<\/\1>

正则逻辑说明

  1. <([a-zA-Z-_]+)>:匹配XML起始标签,同时捕获标签名到分组1,确保后续配对的结束标签一致
  2. \s*:匹配起始标签与CDATA开头之间的任意空白字符(含换行),适配格式不规整的XML
  3. <!\[CDATA\[:精准匹配CDATA的起始标记
  4. (?:(?!]]>).)*?:非捕获分组,用非贪婪模式匹配任意字符,但严格排除]]>,确保只匹配未闭合的CDATA内容
  5. <\/\1>:匹配与起始标签同名的结束标签,精准定位“CDATA未闭合就直接结束父标签”的错误场景

效果验证

  • 错误场景:会精准捕获<Couleur_regroupement>标签内未闭合的CDATA内容,不会误判下方正常的CDATA
  • 正常场景:CDATA内的HTML标签不会触发父标签的结束匹配,且CDATA有正确的]]>闭合,因此不会被误捕获

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:12:47