11

次の Java コードがあります。

str = str.replaceAll("<.*?>.*?</.*?>|<.*?/>", "");

これにより、文字列が次のようになります。

How now <fizz>brown</fizz> cow.

の中へ:

How now  cow.

<fizz>ただし、 and</fizz>タグ、またはスタンドアロンの</fizz> タグのみを取り除き、要素のコンテンツをそのままにしておきたいと思います。したがって、上記を次のように変換する正規表現は次のようになります。

How now brown cow.

または、より複雑な文字列を使用すると、次のようになります。

How <buzz>now <fizz>brown</fizz><yoda/></buzz> cow.

の中へ:

How now brown cow.

私はこれを試しました:

str = str.replaceAll("<.*?></.*?>|<.*?/>", "");

そして、それはまったく機能しません。何か案は?前もって感謝します!

4

6 に答える 6

39
"How now <fizz>brown</fizz> cow.".replaceAll("<[^>]+>", "")
于 2013-04-02T16:18:15.193 に答える
7

あなたはほとんどそこにいました;)

これを試して:

str = str.replaceAll("<.*?>", "")
于 2013-04-02T16:18:42.110 に答える
3

他にも正解はありますが、どれも何の説明もありません。

正規表現<.*?>.*?</.*?>|<.*?/>が機能しない理由は、タグとその中のすべてを選択するためです。debuggexで実際にそれを見ることができます。

2 回目の試行<.*?></.*?>|<.*?/>が機能しない理由は、タグの先頭からタグに続く最初の終了タグまでを選択するためです。ちょっと大雑把ですが、この例で何が起こっているかをよく理解できます。

必要な正規表現はもっと単純です: <.*?>. 開いているか閉じているかを無視して、すべてのタグを選択するだけです。視覚化

于 2013-04-02T18:00:01.683 に答える
2

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

str = str.replaceAll("<.*?>", "");

理解を深めるために、以下の例をご覧ください。

public class StringUtils {

    public static void main(String[] args) {
        System.out.println(StringUtils.replaceAll("How now <fizz>brown</fizz> cow."));
        System.out.println(StringUtils.replaceAll("How <buzz>now <fizz>brown</fizz><yoda/></buzz> cow."));
    }

    public static String replaceAll(String strInput) {
        return strInput.replaceAll("<.*?>", "");
    }
}

出力:

How now brown cow.
How now brown cow.
于 2013-04-02T16:32:42.363 に答える