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

Java正则提取斜杠/反斜杠后的内容?正则新手求助

Java中使用String.split()提取文件名的正确方式

你之前用myStr.split("[^\\\\/]+$")得到的是前面的路径部分,因为这个正则匹配的是最后一段非斜杠(\或/)的内容,split会把这段内容从原字符串中移除,剩下的自然是前面的路径,而非你要的文件名。

要提取最后一段文件名,有两种简单可靠的方案:

方案1:按斜杠分割后取最后一个元素

直接用[\\\\/]作为分隔符(匹配\或/),分割后数组的最后一个元素就是目标文件名:

String myStr = "%abc%\\xyz\\test.exe";
String[] parts = myStr.split("[\\\\/]");
String fileName = parts[parts.length - 1]; // 结果为test.exe
  • 对于"test.exe"这种没有斜杠的字符串,split后数组只有一个元素,直接取parts[0]即可,parts.length - 1同样指向这个元素,无需额外判断。
  • 这个方案逻辑直观,新手更容易理解和维护。

方案2:匹配并移除最后一个斜杠之前的所有内容

用正则.*[\\\\/]匹配从开头到最后一个斜杠的所有内容,split后剩下的部分就是文件名:

String myStr = "%abc%/xyz/test.exe";
String[] parts = myStr.split(".*[\\\\/]");
String fileName = parts.length > 1 ? parts[1] : parts[0];
  • 当字符串包含斜杠时,split会把匹配到的路径部分移除,剩下的parts[1]就是文件名;
  • 当没有斜杠时,正则无法匹配任何内容,split后数组只有原字符串,直接取parts[0]即可。

测试所有场景

把两种方案放到测试代码里验证:

public class FileNameExtractor {
    public static void main(String[] args) {
        String[] testCases = {
            "%abc%\\xyz\\test.exe",
            "%abc%/xyz/test.exe",
            "test.exe"
        };

        // 方案1测试
        System.out.println("=== 方案1测试 ===");
        for (String str : testCases) {
            String[] parts = str.split("[\\\\/]");
            System.out.println(parts[parts.length - 1]);
        }

        // 方案2测试
        System.out.println("\n=== 方案2测试 ===");
        for (String str : testCases) {
            String[] parts = str.split(".*[\\\\/]");
            String fileName = parts.length > 1 ? parts[1] : parts[0];
            System.out.println(fileName);
        }
    }
}

运行后两种方案都会输出三次test.exe,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:36:29