工具方法:
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” 出现。
以前一直觉得是?加在第二个 ['\"]后面,这是不对的,应该是匹配尽量少的字符,直到 ['\"]出现。
额。不理解的话,就跟我一样就把 .*? 的用法背过吧。