问题描述
我正在用 Java 编写一些程序,我需要“规范化”URI,这意味着无论时间戳、portalId、超时、应用程序版本等查询参数值如何,都将 URI 视为唯一的。
这是我的正则表达式模式: (?
它适用于以下 URI: https://app.url.com/user/1234567
但是,它不适用于下面的 URI。是否可以使用一种 Regex 模式来适应这两种情况?
解决方法
示例中的数字似乎在 /
或 =
以及 version=
之后
您可能要做的是匹配 1 个或多个数字,在左侧断言 /
或 =
,而不是例如在左侧断言 version=
。
(?<=[/=])(?<!version=)\d+
模式匹配:
-
(?<=[/=])
正向后视,直接向左断言/
或+
-
(?<!version=)
否定后视,断言不version=
直接向左 -
\d+
匹配 1 个以上的数字
要删除路径和/或查询参数中的尾随数字 ID:
url = url.replaceAll("/\\d+\\b|\\?.*","");