使用正则表达式将 SGML 转换为 XML?

Convert SGML to XML with regex?

我想使用正则表达式将 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("<([^<>]+?)>([^<>]+?)<(?!/\>)", "<></><");
System.out.println(a);

但是结果不是预期的:

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

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

使用下面的正则表达式

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

然后用

替换匹配项
<</>

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

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

输出:

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