0

Java 文字列から XML タグを削除しようとしています。私の見方では、次のいずれかまたは両方の形式に従うものは XML タグです。

  • <*>*<*/*>など<fizz>buzz< /fizz>。また
  • <*/*>、 そのような< fizz />

私の正規表現は単純です:

String tagful = "Hello <fizz>buzz</fizz>Regexes!";
String tagless = tagful.replaceAll("<*>*<*/*>", "");
tagless = tagless.replaceAll("<*/*>", "");
System.err.println("TAGLESS:\n\t" + tagless);

これを実行するHello <fizzbuzz</fizzRegexes!と、出力として取得されますが、(XML ストリッピング コードが正しかった場合) が取得されるはずHello Regexes!です。私はどこで迷うのですか?

注意:既存のライブラリを使用したくありません。ここで純粋な Java 正規表現ソリューションを探しています。前もって感謝します!

4

3 に答える 3

1

おそらく、代わりにこのようなものが必要です-タグの属性やシェブロンの内容に関係なく、任意のタグ(つまり「<>」)を置き換えます。

String tagful = "Hello <fizz>buzz</fizz>Regexes!";
String tagless = tagful.replaceAll("<[^>]*>", "");
//tagless = tagless.replaceAll("<*/*>", "");
System.err.println("TAGLESS:\n\t" + tagless);
于 2013-03-19T17:37:49.953 に答える
1

*に変更する必要があります.*?。と を試して"<.*?>.*?</.*?>"ください"<.*?/>"
あるいは単に "<.*?>.*?</.*?>|<.*?/>"

  • *は、その前の要素が 0 回以上出現できることを意味します。
  • .「改行マークの横にあるもの」を意味します。

したがって、 から<.*>までの間<であれば何でも受け入れ>ます。

しかし、この形式.*では貪欲であり、文字列などでは一部"<abc>def<ghi>"が一致"abc>def<ghi"します。

最小セットに一致させるには?、 afterを使用する必要があります*

于 2013-03-19T17:38:11.080 に答える
0

これも試すことができます..

String tagful = "Hello <fizz>buzz</fizz>Regexes!";
String tagless = tagful.replaceAll("\\<.*?\\>", "");
System.out.println("TAGLESS:\n\t" + tagless);
于 2013-03-19T17:45:42.410 に答える