正则表达式模式从 URL 中去除所有数字字符版本号除外

问题描述

我正在用 Java 编写一些程序,我需要“规范化”URI,这意味着无论时间戳、portalId、超时、应用程序版本等查询参数值如何,都将 URI 视为唯一的。

这是我的正则表达式模式: (?

它适用于以下 URI: https://app.url.com/user/1234567

但是,它不适用于下面的 URI。是否可以使用一种 Regex 模式来适应这两种情况?

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

解决方法

示例中的数字似乎在 /= 以及 version= 之后

您可能要做的是匹配 1 个或多个数字,在左侧断言 /=,而不是例如在左侧断言 version=

(?<=[/=])(?<!version=)\d+

模式匹配:

  • (?<=[/=]) 正向后视,直接向左断言 /+
  • (?<!version=) 否定后视,断言不version= 直接向左
  • \d+ 匹配 1 个以上的数字

Regex demo

,

要删除路径和/或查询参数中的尾随数字 ID:

url = url.replaceAll("/\\d+\\b|\\?.*","");