Java正则提取URL最后一个路径段(文件名)

代码

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static String extractFilenameFromUrl(String url) {
        Pattern pattern = Pattern.compile(".*/([^?]+)(?:\\?.*)?");
        Matcher matcher = pattern.matcher(url);
        if (matcher.find()) {
            return matcher.group(1);
        }
        return null;
    }

    public static void main(String[] args) {      
        String url = "http://192.168.1.1:8080/projects/313601/Origin/92507904.png?X-Amz-Algorithm=AWS4-HMAC-SHA256";
        String filename = extractFilenameFromUrl(url);
        System.out.println(filename); // 输出: 92507904.png
    }
}

可以从url提取文件名:92507904.png

正则含义

.*/([^?]+)(?:\\?.*)?的含义:

1、.*/​​

  • .*:匹配任意字符(除换行符)​​零次或多次​​(贪婪模式,会尽可能匹配到最后一个/)。
  • /:匹配字面的 / 字符(跳过所有字符,直到找到最后一个/)。

2、 ([^?]+):捕获最后一个/之后、第一个?之前的所有字符(即路径的最后一段)。​​

  • [^?]+:匹配​​一个或多个非? 的字符​​([^?] 是排除?的字符集)。

  • () 捕获,表示提取这部分内容。

3、 (?:\\?.*)?:忽略查询参数部分(?key=value),但不捕获它​​。

  • (?:):非捕获分组。
  • \\?是转义,以匹配?,还匹配其后的任意字符.*,整个分组是可选的()?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值