You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java Pattern和Matcher提取URL时多余字符问题求助

问题分析与解决

问题原因

你写的正则表达式https?:\\S+[^\");]没能排除末尾的");",核心问题出在\\S+上:

  • \\S匹配任意非空白字符,而")"和";"都属于非空白字符,所以\\S+会直接把URL后面的");"也包含进去
  • 后面的[^\");]是试图再匹配一个不属于");的字符,但这步是在\S+`匹配完成之后执行的,根本没法回溯去掉已经匹配到的");"

修正后的正则与代码

把正则改成用正向预查来限定URL的结束位置,确保只匹配到");之前的内容:

public static String extractUrl(String str){
    String url= "";
    // 用正向预查(?=[");])匹配到");之前的内容,不包含这些结束符
    Pattern pattern = Pattern.compile("https?:\\S*?(?=[\");])");
    Matcher matcher = pattern.matcher(str);
    if(matcher.find()) {
        url = matcher.group(0);
        System.out.println("Media services URl is :\n "+ url);
        log.info("Media services URl is :\n {}", url);
    }
    return url;
}

正则说明

  • https?: 匹配http或https开头
  • \\S*? 非贪婪匹配任意非空白字符,*?表示尽可能少匹配,直到遇到后面的限定条件
  • (?=[");]) 正向预查,匹配到"、)或;之前的位置,这些结束符不会被包含在匹配结果里

内容的提问来源于stack exchange,提问作者Alferd Nobel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:37:33