0

我在用我的程序完成一些事情时遇到了麻烦,我希望有人能够提供帮助。

我有一个包含 HTML 页面源代码的字符串。

我想做的是提取以下 HTML 的所有实例并将其放在一个数组中:

<img src="http://*" alt="*" style="max-width:460px;">

所以我会有一个 X 大小的数组,其中包含与上面类似的值,显然更新了 src 和 alt 属性。

这可能吗?我知道有 XML 解析器,但格式总是一样的。

任何帮助将不胜感激。

4

2 回答 2

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));

        }
    }
}
于 2012-09-24T21:00:46.087 回答
1

当您获得ArrayIndexOutOfBoundsException时,很可能该String数组imageTitles不足以容纳在正则表达式搜索中找到的所有 ALT 实例。在这种情况下,它很可能是一个大小为零的数组。

于 2012-09-24T20:53:32.537 回答