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

Java正则移除双引号内mml标签属性内容失效问题排查

问题根源

你的代码有两个核心错误:

  • String.replace()方法是纯字面量匹配,不支持正则语法,你传入的(.*?)会被当成普通字符串查找,自然无法匹配到对应内容。Java中支持正则替换的方法是String.replaceAll()。
  • 你写的正则模式本身存在错误:模式末尾加了>,但你测试用的字符串里data-name="OPT_ID_1438"后面是空格加stretchy="true"属性,不是直接跟闭合尖括号,就算用了replaceAll也匹配不到内容。
修正方法

1. 固定值精确替换

你写的第一行替换逻辑本身可以正常生效,运行后会把固定的data-name="OPT_ID_1438"片段移除,输出<mml:mo stretchy="true">。

2. 通用正则替换(兼容任意data-name属性值)

如果要匹配所有data-name="任意属性值"的场景,统一替换为<mml:mo,调用replaceAll方法并修正正则即可:

public static void main( String[] args )
{
    String strXmlTxt="<mml:mo data-name=\"OPT_ID_1438\" stretchy=\"true\">";
    // 精确替换固定属性值
    strXmlTxt = strXmlTxt.replace("<mml:mo data-name=\"OPT_ID_1438\"","<mml:mo");
    // 正则替换任意data-name属性值
    String strXmlTxt1 = strXmlTxt.replaceAll("<mml:mo\\s+data-name=\"[^\"]*\"", "<mml:mo");
    System.out.println(strXmlTxt);
    System.out.println(strXmlTxt1);
}

正则说明:

  • \\s+:匹配标签名和属性之间的一个或多个空白字符,兼容多空格、换行等写法
  • [^\"]*:匹配双引号包裹的属性值,相比.*?匹配效率更高,不会出现跨标签误匹配的问题
  • Java字符串中编写正则时,反斜杠需要双写,先经过Java字符串转义后,再交给正则引擎解析

注意:如果是处理正式的XML/HTML内容,优先使用专用的文档解析器(如Jsoup、JDK内置的XML解析器)处理,正则处理结构化标记容易在属性顺序变化、属性值包含转义字符时出现匹配错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:33:33