所以一个正则表达式专业人士我不是,我正在寻找一个很好的方法来做到这一点。我有一个包含可变数字<img>
标签的大字符串。我需要将所有这些图像的路径更改为images/
。大字符串还包含其他东西,而不仅仅是这些img的。
<img src='http://server.com/stuff1/img1.jpg' />
<img src='http://server.com/stuff2/img2.png' />
用我能做的ReplaceAll()
替换服务器名称,它是中间的可变路径我对如何包含无能为力。它不一定需要是一个正则表达式,但循环遍历整个字符串似乎很浪费。
答案 0 :(得分:2)
Apache Commons Lang提供API来进行各种替换:
String dirName = "images";
StringUtils.replace(html, "http://server.com/stuff1/", dirName + "/");
答案 1 :(得分:2)
以下内容可用于替换从server.com链接到jpg的所有<img>
标记:
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'");
如果这个字符串替换的次数超出了你想要的范围,只需添加你想要匹配的更多文字字符串。
答案 2 :(得分:0)
使用Java String方法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