11

いくつかのタグ内のコンテンツを置き換えたい、例えば:

<p>this it to be replaced</p>

このようにグループ間のコンテンツを抽出することはできますが、実際にグループを置き換えることはできますか?

str = str.replaceAll("<p>([^<]*)</p>", "replacement");
4

2 に答える 2

9

これには、ルックアラウンド(ポジティブルックアヘッドおよびルックビハインド)を使用できます。

正規表現を次のように変更し"(?<=<p>)(.*?)(?=</p>)"ます。これで問題ありません。


例:

String str = "<p>this it to be replaced</p>";
System.out.println(str.replaceAll("(?<=<p>)(.*?)(?=</p>)", "replacement"));

出力:

<p>replacement</p>

ただし、HTMLを解析する場合は、ある種のHTMLパーサーを使用する必要があることに注意してください。多くの場合、正規表現では不十分です...

于 2012-06-21T12:45:27.370 に答える
8

正規表現を次のように変更します。

(?<=<p>).*?(?=</p>)

すなわち

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

これは、「後読み」と「先読み」を使用して、一致する (貪欲ではない) 正規表現の前後の入力をアサートしますが、キャプチャはしません。

誰かが疑問に思っている場合に備えて、この答えは dacwe のものとは異なります。彼は不要な括弧を使用しています。この答えはよりエレガントです:)

于 2012-06-21T12:46:41.203 に答える