【问题标题】:Matching url with parameters to url with placeholders将带参数的 url 与带占位符的 url 匹配
【发布时间】:2015-12-24 14:58:32
【问题描述】:

我正在存储包含参数占位符的 URL 模式:{param} 在其中标识插入参数的位置但是,如果我使用占位符模式存储 URL 并传递带有参数的 URL,我不知道如何识别带有占位符的原始 URL。我将带有占位符的 URL 放在地图中,因此如果我使用与存储的 URL 相同的 URL 查询地图,但占位符已填写,则找不到。

例如——在地图中:

testurl/{param1}/{param2}

那我要检查以下网址是否在地图中:

testurl/1/2

它应该找到的模式是独一无二的,但是我刚刚填写了参数。无论如何我可以用正则表达式或其他方法来实现这一点吗?我不介意遍历地图中的所有 URL 并进行比较,但我只是不知道如何比较它们

【问题讨论】:

    标签: java regex url


    【解决方案1】:

    我知道为时已晚,但供将来参考。您可以使用 UriTemplate。例如

    UriTemplate uriTemplate = new UriTemplate(url);
    if(uriTemplate.matches(other.url)){
       //match
    }
    

    【讨论】:

      【解决方案2】:

      您的参数值可以是任何不包含斜杠 (/) 的字符串,因此正则表达式为:

      testurl/([^/]*)/([^/]*)
      

      这将捕获您的两个参数。

      它允许一个值是空白的。如果不需要,请将 * 更改为 +

      如果参数必须是整数,请更改为testurl/(\d+)/(\d+)(在插入 Java 字符串时记得使用双反斜杠 (\))

      【讨论】:

      • 以上只是一个例子,可能是这样的:testurl/branch/{param1}/{param2}/branch 等等。每个url都没有特定的顺序,它是一个 url,只要它是一个有效的 url,参数就可以在任何地方。
      • 这就是为什么我给了你可选参数版本、必需参数版本和整数版本。您可以为每个参数选择要使用的参数,或使用适合相关参数的任何其他正则表达式。
      猜你喜欢
      • 2018-10-21
      • 2015-11-14
      • 2015-03-21
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 2020-04-16
      相关资源
      最近更新 更多