【爬虫工具方法】根据属性得到一条HTML标签的一个属性值

来源:互联网 发布:java怎么运行 编辑:程序博客网 时间:2024/06/06 11:46

工具方法:

public static String getValueByKeyInHtml(String src, String key) {        Pattern pattern = Pattern.compile("(?:" + key + "\\s*=\\s*)" + "['\"](.*?)['\"]");        Matcher matcher = pattern.matcher(src);        if (matcher.find()) {            return matcher.group().replaceAll(key + "\\s*=\\s*", "").replaceAll("\"", "");        }        return null;    }

示例:

NiceUtil.getValueByKeyInHtml("<a href="https://www.baidu.com/">","href");//会返回 https://www.baidu.com/

正则讲解:

重点是   .*?  的用法。其他都很简单。
关于   .*?  的意思,
. : 任意字符(不包括回车)
*: 零个或任意个
? : 非贪婪模式

所以连起来就是:取尽量少的任意字符。
但它一般不会这么单独写,大多会这么用:
.*?a
意思就是取前面任意长度的字符,到“第一个a” 出现。

以前一直觉得是?加在第二个 ['\"]后面,这是不对的,应该是匹配尽量少的字符,直到 ['\"]出现。

额。不理解的话,就跟我一样就把 .*? 的用法背过吧。