所以我不是正则表达式专业人士,我正在寻找一种好方法来做到这一点。我有一个大字符串,其中包含可变数字 <img>
标签。我需要将所有这些图像的路径更改为 images/
。大字符串还包含其他内容,而不仅仅是这些 img。
<img src='http://server.com/stuff1/img1.jpg' />
<img src='http://server.com/stuff2/img2.png' />
将服务器名称替换为 ReplaceAll()
我可以做,这是中间的变量路径,我不知道如何包含。它不一定需要是正则表达式,但循环整个字符串似乎很浪费。
最佳答案
以下内容应该适用于替换所有 <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'");
如果替换的内容超出了您的预期,只需添加更多您想要匹配到正则表达式的文字字符串即可。
关于Java正则表达式替换大字符串中的多个文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13767616/