0

ですから、私は正規表現のプロではありません。これを行うための良い方法を探しています。<img>可変数のタグを含む大きな文字列があります。これらすべての画像のパスをに変更する必要がありますimages/。大きな文字列には、これらのimgだけでなく他のものも含まれています。

<img src='http://server.com/stuff1/img1.jpg' />
<img src='http://server.com/stuff2/img2.png' />

サーバー名を私ができることで置き換えるとReplaceAll()、それは私がどのように含めるかについて無知な真ん中の可変パスです。必ずしも正規表現である必要はありませんが、文字列全体をループするのは無駄に思えます。

4

3 に答える 3

2

Apache Commons Langは、あらゆる種類の置換を行うためのAPIを提供します。

String dirName = "images";
StringUtils.replace(html, "http://server.com/stuff1/", dirName + "/");
于 2012-12-07T17:10:12.753 に答える
2

<img>以下は、server.comからjpgにリンクするすべてのタグを置き換えるために機能するはずです。

s.replaceAll("<img src='http://server.com[^']*/([^']*)' />", "<img src='images/$1' />");

srcプロパティを二重引用符で囲んで使用している場合:

s.replaceAll("<img src=\"http://server.com[^\"]*/([^\"]*)\" />", "<img src=\"images/$1\" />");

これ[^']*/が機能するのは、一重引用符ではない文字をできるだけ多く一致させてから、リテラルの「/」を一致させるため、パス全体を消費するためです。すべての<img>タグがserver.comからのものである場合は、削除できhttp://server.com、正規表現は同じように機能します。

すべての画像タグを置き換える必要があることが事前にわかっている場合、または文字列がタグのみで構成されている場合は、これをさらに短縮できることに注意してください。<img>たとえば、次を使用して、すべてのsrcプロパティのパスを置き換えることができます。

s.replaceAll("src='[^']*/([^']*)'", "src='images/$1'");

必要以上に置き換えられる場合は、一致させたいリテラル文字列を正規表現に追加するだけです。

于 2012-12-07T17:15:17.610 に答える
0

Java文字列メソッドを使用するreplaceAll(regex, replacement)

どこ

String regex = "(http://server\\.com/)[^<]+(/[^<]+)";

String directory = "images";
String replacement = "$1" + directory + "$2";

これは変わります

http://server.com/stuff1/img1.jpg

の中へ

http://server.com/images/img1.jpg

例えば:

String content = "<img src=\"http://server.com/stuff1/img1.jpg\"><img src=\"http://server.com/stuff1/img2.jpg\"><img src=\"http://server.com/stuff1/img3.jpg\">"
String regex = "(http://server\\.com/).+(/img1\\.jpg)";
String directory = "images";
String replacement = "$1" + directory + "$2";
content = content.replaceAll(regex, replacement);
System.out.println(content);

出力します:

<img src="http://server.com/images/img1.jpg"><img src="http://server.com/images/img2.jpg"><img src="http://server.com/images/img3.jpg">

完全なホスト名をスキップして相対パスを使用する場合は、次のように変更replacementします。

String replacement = directory + "$2";

これは変わります

http://server.com/stuff1/img1.jpg

の中へ

images/img1.jpg
于 2012-12-07T17:05:11.370 に答える