おそらく、解析は DOM パーサーに任せるべきです (この質問を参照してください)。<p>
タグ内のテキストを見つけるためにこれを行う必要があることはほぼ保証できます。
置換ロジックにString.replaceAll
は、必要なマッチングを実行できる正規表現を使用します。
必要な正規表現の「ワイルドカード」は.*
式です。あなたの例を使用して:
String ampStr = "This &escape;String";
String removed = ampStr.replaceAll("&.*;", "");
System.out.println(removed);
これは を出力しますThis String
。は.
任意の文字を表し、*
は「この文字が 0 回以上」を意味するためです。つまり、.*
基本的には「任意の数の文字」を意味します。ただし、次のように供給します。
"This &escape;String &anotherescape;Extended"
おそらくあなたが望むことをしないでしょう、そしてそれは出力しますThis Extended
. これを修正するには、文字の代わりに探したいものを正確に指定します.
。これは、 「セミコロン[^;]
以外の任意の文字:
String removed = ampStr.replaceAll("&[^;]*;", "");
これは、一致しない文字列よりもパフォーマンス上の利点が&.*?;
あるため、このバージョンを使用することを強くお勧めします。特に、すべての HTML ファイルに&abc;
トークンが含まれるわけではなく&.*?;
、結果としてパフォーマンスの大きなボトルネックになる可能性があるためです。