Java如何使用正则表达式将URL中数字路径变量替换为*
解决方案
你之前使用的\/\d+.*无法得到预期结果的原因是.*会贪婪匹配第一个数字段后的所有内容,不符合分段替换纯数字路径段的需求。
符合需求的正则表达式Java写法为(?<=/)\\d+(?=/|$),直接调用String的replaceAll方法将匹配内容替换为*即可。
代码示例
public class UrlIdReplace { public static void main(String[] args) { String regex = "(?<=/)\\d+(?=/|$)"; // 第一个测试用例 String url1 = "https://stackoverflow.com/questions/ask/123/456"; String res1 = url1.replaceAll(regex, "*"); System.out.println(res1); // 输出:https://stackoverflow.com/questions/ask/*/* // 第二个测试用例 String url2 = "https://stackoverflow.com/questions/ask/123/456/find"; String res2 = url2.replaceAll(regex, "*"); System.out.println(res2); // 输出:https://stackoverflow.com/questions/ask/*/*/find } }
正则规则说明
(?<=/):正向肯定后视断言,要求匹配的数字前必须是路径分隔符/,确保数字是路径段的起始部分\\d+:匹配1个及以上的阿拉伯数字(?=/|$):正向肯定前瞻断言,要求匹配的数字后要么是路径分隔符/,要么是URL整体结尾,确保匹配的是完整的纯数字路径段
该规则不会误替换/user123/、?id=456这类混有非数字字符的路径段、查询参数中的数字,更贴合ID类路径变量的替换需求。
内容的提问来源于stack exchange,提问作者Shehan Simen
相关产品推荐
相关产品推荐

