Java如何编写正则去除URL中除版本号外的数字字符以实现URI归一化
URI归一化正则解决方案
适配需求的正则表达式
Java代码中可直接使用以下正则,匹配所有需要删除的数字字符,自动跳过版本号相关数字:
String regex = "(?<!v|V|\\d|\\.)\\d+(?!\\d|\\.)";
使用方式
直接调用String的replaceAll方法,将匹配到的内容替换为空字符串即可:
// 示例工具方法 public static String normalizeUri(String rawUri) { String regex = "(?<!v|V|\\d|\\.)\\d+(?!\\d|\\.)"; return rawUri.replaceAll(regex, ""); }
效果验证
测试用例1(路径含纯数字段)
- 输入:
https://app.url.com/user/1234567 - 输出:
https://app.url.com/user/
测试用例2(含查询参数与多版本号)
- 输入:
https://api.url.com/logging/v1/log/analytics-multi/no-auth?clientSendTimestamp=1622719272795&id=863256543&clienttimeout=14000&hs_static_app=automation-ui&hs_static_app_version=1.3520 - 输出:
https://api.url.com/logging/v1/log/analytics-multi/no-auth?clientSendTimestamp=&id=&clienttimeout=&hs_static_app=automation-ui&hs_static_app_version=1.3520
正则逻辑说明
- 负向回顾断言
(?<!v|V|\\d|\\.):确保匹配的数字前不是版本号前缀v/V、其他数字或小数点,避免误删版本号内容 \\d+:匹配连续1个及以上的数字字符- 负向前瞻断言
(?!\\d|\\.):确保匹配的数字后不是其他数字或小数点,进一步过滤带小数的版本号片段
内容的提问来源于stack exchange,提问作者jayteezer
相关产品推荐
相关产品推荐

