【问题标题】:Convert SGML to XML with regex?使用正则表达式将 SGML 转换为 XML?
【发布时间】:2015-01-09 14:46:35
【问题描述】:

我想用正则表达式将 SGML 转换为 XML。喜欢:

转换:

<a><ab><abc>111<abc2>222</ab></a>

到:

<a><ab><abc>111</abc><abc2>222</abc2></ab></a>

我编写了以下代码来进行转换:

String a = "<a><ab><abc>abc<abc2>abc2</ab></a>";
a = a.replaceAll("<([^<>]+?)>([^<>]+?)<(?!/\\$1>)", "<$1>$2</$1><");
System.out.println(a);

然而结果不是预期的:

<a><ab><abc>111</abc><abc2>222</ab></a>

我的问题,是否可以使用正则表达式进行转换?如果是,我的代码有什么问题?

【问题讨论】:

标签: java regex xml


【解决方案1】:

使用下面的正则表达式

<(([^<>]+?)>)([^<>]+?)(?=<(?!\1))

然后将匹配替换为

<$1$3</$2>

https://regex101.com/r/cD1nC8/1

String s = "<a><ab><abc>111<abc2>222</ab></a>";
System.out.println(s.replaceAll("<(([^<>]+?)>)([^<>]+?)(?=<(?!\\1))", "<$1$3</$2>"));

输出:

<a><ab><abc>111</abc><abc2>222</abc2></ab></a>

【讨论】:

  • \\$ 匹配文字 $ 符号。添加一个额外的捕获组来捕获尾随的&gt; 符号。
  • 我在处理多行时又遇到了麻烦。 regex101.com/r/cD1nC8/4
猜你喜欢
  • 2018-02-08
  • 2013-03-18
  • 1970-01-01
  • 2011-10-02
  • 2016-04-02
  • 1970-01-01
  • 2019-05-11
  • 2014-11-08
  • 2017-12-29
相关资源
最近更新 更多