いくつかのタグ内のコンテンツを置き換えたい、例えば:
<p>this it to be replaced</p>
このようにグループ間のコンテンツを抽出することはできますが、実際にグループを置き換えることはできますか?
str = str.replaceAll("<p>([^<]*)</p>", "replacement");
これには、ルックアラウンド(ポジティブルックアヘッドおよびルックビハインド)を使用できます。
正規表現を次のように変更し"(?<=<p>)(.*?)(?=</p>)"
ます。これで問題ありません。
String str = "<p>this it to be replaced</p>";
System.out.println(str.replaceAll("(?<=<p>)(.*?)(?=</p>)", "replacement"));
出力:
<p>replacement</p>
ただし、HTMLを解析する場合は、ある種のHTMLパーサーを使用する必要があることに注意してください。多くの場合、正規表現では不十分です...
正規表現を次のように変更します。
(?<=<p>).*?(?=</p>)
すなわち
str = str.replaceAll("(?<=<p>).*?(?=</p>)", "replacement");
これは、「後読み」と「先読み」を使用して、一致する (貪欲ではない) 正規表現の前後の入力をアサートしますが、キャプチャはしません。
誰かが疑問に思っている場合に備えて、この答えは dacwe のものとは異なります。彼は不要な括弧を使用しています。この答えはよりエレガントです:)