Java正则提取URL斜杠间指定字符串的实现需求问询
用正则表达式提取URL中的目标关键词
没问题,我来帮你搞定这个需求!我们可以通过预编译正则表达式来高效提取/shirt/路径后的第一个有效关键词,完美适配你给出的所有测试用例。
实现思路
核心需求是:只有当URL以/shirt/开头时,提取后面第一个非斜杠、非查询参数的路径段。我们可以用正则表达式精准匹配这个规则,同时处理各种边界情况(比如空URL、/shirt、带查询参数的URL等)。
完整代码实现
import java.util.regex.Matcher; import java.util.regex.Pattern; public class URLKeywordExtractor { // 预编译正则表达式,避免重复编译提升性能 private static final Pattern SHIRT_KEYWORD_PATTERN = Pattern.compile("^/shirt/([^/?]+)"); public static String getRelativeWebappURL(String url) { // 处理空或null输入的边界情况 if (url == null || url.isEmpty()) { return ""; } Matcher matcher = SHIRT_KEYWORD_PATTERN.matcher(url); // 匹配成功则返回捕获的关键词,否则返回空字符串 return matcher.find() ? matcher.group(1) : ""; } public static void main(String[] args) { String testURLs[] = {"", "/" ,"/shirt", "/shirt/", "/shirt/abc", "/shirt/abc/", "/shirt/abc/xyz", "/shirt/abc?x=y", "/shirt/xyz/abc/pqr", "abc/something", "/abc/some", "abc/shirt/something"}; for(String x : testURLs){ System.out.println(x + " --> " + getRelativeWebappURL(x)); } } }
正则表达式详解
^/shirt/([^/?]+) 的含义拆解:
^:匹配字符串的起始位置,确保/shirt/是URL路径的开头,避免匹配类似abc/shirt/something这种不符合要求的路径/shirt/:精确匹配我们要定位的前缀路径([^/?]+):捕获组(这就是我们要提取的关键词),其中:[^/?]:匹配**除了斜杠/(路径分隔符)和问号?(查询参数起始符)**之外的任意字符+:要求至少匹配一个字符,确保我们提取的是有效的非空关键词
测试结果运行输出
运行上面的main方法,你会得到如下输出:
--> / --> /shirt --> /shirt/ --> /shirt/abc --> abc /shirt/abc/ --> abc /shirt/abc/xyz --> abc /shirt/abc?x=y --> abc /shirt/xyz/abc/pqr --> xyz abc/something --> /abc/some --> abc/shirt/something -->
完全符合你的预期需求!
内容的提问来源于stack exchange,提问作者smilyface
相关产品推荐
相关产品推荐

