在html doc中,我需要用文件名替换文件的完整路径。 文档非常大,所以我认为我可以使用正则表达式来获得实用的解决方案。我已经阅读了类似的问题,并尝试了解决方案,但这只是没有用。
实施例。给出这个html输入。
<img src="app/javax.faces.resource/color_pan.png?ln=img/partidos" style="width:100%; height:30px;" class="centerImg"/>
<img src="/app/javax.faces.resource/pan.png?ln=img/partidos" class="centerImg"/>
我需要以下输出:
<img src="color_pan.png" style="width:100%; height:30px"; class="centerImg"/>
<img src="pan.png" class="centerImg"/>
我正在尝试这些模式:
Pattern p = Pattern.compile("src=\"(?=.*src).*/color_pan.png[^\"]*\"");
Patter p1 = Pattern.compile("src=\"(?!.*src).*/pan.png[^\"]*\"");
第一个适用于第一个图像,第二个适用于第二个(两者都在同一个html文档中)。 我需要一个适用于每个图像的通用模式。所以问题是只找到文件名左边的第一个“src”元素。换句话说,“src”必须是文件名前面的最后一个。 这样,我可以正确地替换字符串。 任何帮助表示赞赏。
答案 0 :(得分:0)
这个正则表达式似乎做了工作
解决方案1&lt; = 2匹配1509步
(^<img src=")(?:.*?)([\w.]+)(?=\?)[^"]*"(.*$)
迈向有效的解决方案
解决方案2&lt; = 2个匹配593步
(^<img src=").*(?<=\/|")([\w.]+)(?=\?)[^"]*"(.*$)
Java代码
String pattern = "(^<img src=\")(?:.*?)([\\w.]+)(?=\\?)[^\"]*\"(.*$)";
Pattern r = Pattern.compile(pattern);
while (true) {
String line = x.nextLine();
Matcher m = r.matcher(line);
if (m.find()) {
System.out.println(m.group(1) + m.group(2) + m.group(3));
} else {
System.out.println("Not Found");
}
}
<强> Ideone Demo 强>