Java帮助操作锚点与模式

时间:2012-09-24 20:39:26

标签: java regex

我无法通过我的计划完成一些事情,我希望有人能够提供帮助。

我有一个包含HTML页面源代码的String。

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

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

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

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

非常感谢任何帮助。

2 个答案:

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

        }
    }
}