1

以下のユースケースで、Javaで正規表現ベースの文字列置換を探しています。GroovyベースのXML処理を行っていますが、カスタム処理が原因で(これについては詳しく説明しません)、結果のXMLには無効なタグがいくつか含まれています。

<?xml version='1.0' encoding='UTF-8'?>
<Customer id="xyz" xmlns='http://abc.com'>
<order orderGroup="mock">
    <entry>
        <key>test</key>
    </entry>
</order orderGroup="mock">
</Customer id="xyz">

注意すると、属性を含む要素名の終了タグがめちゃくちゃになっています。XMLは文字列として扱われるだけなので、私がやりたいのは、文字列の正規表現ベースの置換を介して、そのような終了タグのオカレンスを置換することです。たとえば、置き換えます

</order orderGroup="mock"> with </order>, 
</Customer id="xyz"> with </Customer>

そのような置換を行うために使用できるJava文字列ベースの正規表現があるかどうかはわかりませんか?

ありがとう。

4

2 に答える 2

5

試す

    xml = xml.replaceAll("</([^ >]+).*?>", "</$1>");
于 2013-03-23T00:15:47.317 に答える
2

最も簡単な解決策は、カスタムXML処理を修正し、有効なXMLを生成することです。

簡単な解決策は、JTidyのようなものを使用してXMLをクリーンアップすることです。

正規表現を使用する必要がある場合は、次のように試すことができます。

Pattern pattern = Pattern.compile("</([A-Za-z]+) [^>]+>");
Matcher matcher = pattern.matcher(xml);

if(matcher.find()) {
   xml = matcher.replaceAll(matcher.group(1));
}

私はこれをテストしていませんので、それを覚えておいてください。いくつかの問題があるかもしれません。

正規表現の説明:

<         -> The opening angle bracket of the tag
/         -> The / that marks a closing tag
(         -> Start of a capturing group. We want to capture the actual ending tag.
[A-Za-z]+ -> One or more alphabetic characters (upper and lowercase)
)         -> End of the capturing group.
          -> A space.
[^>]+     -> One or more of anything that is not a closing angle-bracket.
>         -> The closing angle bracket of the tag.
于 2013-03-22T23:54:56.680 に答える