Java 将带有参数的url与带有占位符的url匹配
我正在存储包含参数占位符的URL模式:Java 将带有参数的url与带有占位符的url匹配,java,regex,url,Java,Regex,Url,我正在存储包含参数占位符的URL模式:{param},以标识在何处插入参数。但是,如果我使用占位符模式存储URL并传递包含参数的URL,我不知道如何使用占位符标识原始URL。我将带有占位符的URL放在地图中,因此如果我查询地图时使用的URL与存储的URL相同,只是占位符已填充,则找不到该URL 例如,在地图中: testurl/{param1}/{param2} testurl/1/2 然后我想检查以下URL是否在地图中: testurl/{param1}/{param2} testurl
{param}
,以标识在何处插入参数。但是,如果我使用占位符模式存储URL并传递包含参数的URL,我不知道如何使用占位符标识原始URL。我将带有占位符的URL放在地图中,因此如果我查询地图时使用的URL与存储的URL相同,只是占位符已填充,则找不到该URL
例如,在地图中:
testurl/{param1}/{param2}
testurl/1/2
然后我想检查以下URL是否在地图中:
testurl/{param1}/{param2}
testurl/1/2
它应该会发现,因为模式是唯一的,但是我刚刚填写了参数。。我是否可以通过正则表达式或其他方法实现这一点?我不介意遍历映射中的所有URL并进行比较,但我不知道如何比较它们您的参数值可以是任何不包含斜杠(
/
)的字符串,因此正则表达式应该是:
testurl/([^/]*)/([^/]*)
这将捕获您的两个参数
它允许值为空。如果不需要,请将*
更改为+
如果参数必须是整数,则更改为
testurl/(\d+)/(\d+)
。(请记住在插入Java字符串时使用双反斜杠(\
)我知道已经太晚了,但仅供将来参考。您可以使用这个模板。比如说
UriTemplate uriTemplate = new UriTemplate(url);
if(uriTemplate.matches(other.url)){
//match
}
上面只是一个例子,可能有这样的东西:testurl/branch/{param1}/{param2}/branch等等。每个url都没有特定的顺序,它是一个url,参数可以在任何地方,只要它是一个有效的url。这就是为什么我为您提供了可选的参数版本,所需的参数版本,和整数版本。您可以为每个参数选择要使用的正则表达式,或者使用适合所讨论参数的任何其他正则表达式。