2012-01-02 6 views
1

私はこれを使用しての知っている:)((置き換える使用)またはでReplaceAll

public String RemoveTag(String html){ 
    html = html.replaceAll("\\<.*?>",""); 
    html = html.replaceAll("&nbsp;",""); 
    html = html.replaceAll("&amp;",""); 
    return html; 
} 

これは、HTML文字列内のすべてのタグを削除します。しかし、疑問はどのようにそれが間に野生の文字を得るのですか<.*?>。誰かが私にStringのワイルド文字を取得する方法の詳細を教えてもらえますか?

この主な理由は、「開始点と終了点の@」という文字が残っていて、"@""}"の間のすべてを取り除きたいということです。

+0

私はあなたが何を求めているのか完全にはわかりません。短いサンプル入力と望ましい出力例を提供できますか? –

+0

正規表現がどのように裏で働くのか尋ねていますか? – amit

+0

ワイルドカード文字が自動的に挿入されていますか? –

答えて

2

を読みたいかもしれませんでReplaceAll(...)への最初のパラメータは、正規表現の文字列です。あなたの例の.*?は、何にもマッチする部分です。

String exampleText = "Start @some text} finish."; 
exampleText.replaceAll("@(.*?)\\}", "@}"); 
System.out.println(exampleText); // prints "Start @} finish." 

お知らせ同じパターン:.*?あなたは「@」と「}」の間にすべてを取り除くだろう正規表現をしたいのであれば、あなたのようなものを使用します。ここではオプションのカッコは、グループ分けに使用されます。 }は、正規表現内で特別な意味を持つことができるため、バックスラッシュでエスケープされています。

Javaの正規表現サポートの詳細については、Pattern classを参照してください。

+0

簡単な質問:\\ forは何ですか? – wesdfgfgd

+0

@Akyllite:これは '}'を壊すためのものだから正規表現は '特別な意味'のない単純な文字として扱われますが、 '}'のために前の ' {'あなたの正規表現で。 – amit

+0

私は2人の男に受け入れられた答えを追加したいと思いますが、 – wesdfgfgd

2

finite automatonを構築することで正規表現を実装することができます。これは、すべての正規表現に有限オートマトンがあり、その逆もあります。

あなたが探している正規表現は、""の代わりに"@}"に置き換えることができますが、これらの文字を保持したい場合は@.*?}です。それは次のようなものになります:s.replaceAll("@.*?}", "@}") [sはあなたの文字列です]。

}の特殊文字は、先に{が見当たらない場合はパターン認識ツールで無視する必要がありますが、正規表現「@。*?\}」が必要なようです。安全な側にするには:"@.*?\\}"は@WayneBaylorが投稿したようにどちらの方法でも動作するはずです。

あなたはmore on regular expressions

+0

ウィキペディアの説明をありがとう。私は多くのことを学びました。しかし、コードをテストするとき: "html = html.replaceAll(" @。*?} "、" ");" これは私にこのエラーを与えました:アクティビティを開始できませんComponentInfo {epub.test/epub.test.EpubReadActivity}:java.util.regex.PatternSyntaxException:構文エラーU_REGEX_RULE_SYNTAXインデックス5の近く: @。*?} – wesdfgfgd

+0

@Akylliteできますあなたに試した情報を教えてください。私は再作成しようとします... – amit

+0

Wayneは "exampleText.replaceAll(" @(。*?)\\} "、" @} ");"ありがとう – wesdfgfgd

関連する問題