我的正则表达式为什么在java中就达不到正常的效果呢

用于匹配网页中的favicon图标的正则:

((?<=href=["”']).+?(?=["“']))[^\n\r<]+?rel=["“']shortcut icon["”']

在regex101中的效果:

img

在java中的匹配到的:

https://ngrok.com/static/css/normalize.min.css" rel="stylesheet" type="text/css">    <link href="/static/css/webflow.min.css" rel="stylesheet" type="text/css">    <link href="/static/css/ngrok.webflow.min.css" rel="stylesheet" type="text/css">        <link rel="stylesheet" href="/static/css/base.min.css?t=2021-09-20%2006%3A24%3A22.079983" />    <link rel="stylesheet" href="/static/css/marketing.min.css?t=2021-09-20%2006%3A24%3A22.079983" />        <script src="/static/js/jquery-3.4.1.min.js" type="text/javascript"></script>    <link href

正好匹配到想要的href链接之前,如果给整个正则加上括号,匹配的结果就包含href链接和rel="shortcut icon"了

这该怎么弄?


public static void main(String[] args) {
        String s = "<link.href=\"/static/img/favicon.png\" rel=\"shortcuteicon\"type=\"image/x-";
        Pattern pattern = Pattern.compile("href=\"(.*?)\"(.*?)rel=\"shortcuteicon\"");
        Matcher matcher = pattern.matcher(s);
        if (matcher.find()) {
            System.out.println(matcher.group(1));
        }
    }