我无法通过我的计划完成一些事情,我希望有人能够提供帮助。
我有一个包含HTML页面源代码的String。
我想要做的是提取以下HTML的所有实例并将其放在一个数组中:
<img src="http://*" alt="*" style="max-width:460px;">
所以我会得到一个包含类似于上面值的X大小的数组,显然更新了src和alt属性。
这可能吗?我知道有XML解析器,但格式总是一样。
非常感谢任何帮助。
答案 0 :(得分:1)
当您获得ArrayIndexOutOfBoundsException
时,String
数组imageTitles
很可能不足以容纳正则表达式搜索中找到的所有ALT实例。在这种情况下,它可能是一个零大小的数组。
答案 1 :(得分:1)
我建议使用ArrayList
而不是静态数组,因为看起来你不知道你将会有多少匹配。
对于HTML有REGEX也不是一个好主意,但如果您确定标签总是使用相同的格式,那么我建议:
Pattern pattern = Pattern.compile(".*<img src=\"http://(.*)\" alt=\"(.*)\"\\s+sty.*>", Pattern.MULTILINE);
以下是一个例子:
public static void main(String[] args) throws Exception {
String web;
String result = "";
for (int i = 0; i < 10; i++) {
web = "<img src=\"http://image" + i +".jpg\" alt=\"Title of Image " + i + "\" style=\"max-width:460px;\">";
result += web + "\n";
}
System.out.println(result);
Pattern pattern = Pattern.compile(".*<img src=\"http://(.*)\" alt=\"(.*)\"\\s+sty.*>", Pattern.MULTILINE);
List<String> imageSources = new ArrayList<String>();
List<String> imageTitles = new ArrayList<String>();
Matcher matcher = pattern.matcher(result);
while (matcher.find()) {
String imageSource = matcher.group(1);
String imageTitle = matcher.group(2);
imageSources.add(imageSource);
imageTitles.add(imageTitle);
}
for(int i = 0; i < imageSources.size(); i++) {
System.out.println("url: " + imageSources.get(i));
System.out.println("title: " + imageTitles.get(i));
}
}
}