java正则表达式:检查传入uri是否存在于列表中
我试图编写一个正则表达式来检查传入的url路径是否与我的列表元素匹配。我怎么写呢?。我试图使用String.contains(/api/v1/read)
,但它返回false,即使它出现在列表中
my path : /api/v1/read
List<String> pathList = {"/api/v1/**,/api/v2/**"};
任何帮助都将不胜感激
你可以在下面搜索框中键入要查询的问题!
我试图编写一个正则表达式来检查传入的url路径是否与我的列表元素匹配。我怎么写呢?。我试图使用String.contains(/api/v1/read)
,但它返回false,即使它出现在列表中
my path : /api/v1/read
List<String> pathList = {"/api/v1/**,/api/v2/**"};
任何帮助都将不胜感激
# 1 楼答案
如果您需要支持的唯一通配符是一个以
/**
结尾的路径,那么您可以按如下方式操作:将任何逗号分隔的字符串拆分为单独的路径:
{ "/api/v1/**,/api/v2/**", "/api/foo.ico" }
→
{ "/api/v1/**", "/api/v2/**", "/api/foo.ico" }
将每个路径转换为正则表达式:
如果路径不是以
/**
结尾,只需调用Pattern.quote(path)
1:"/api/foo.ico"
→"\\Q/api/foo.ico\\E"
如果路径以
/**
结尾,则引用除**
之外的所有内容,并将其替换为.*
:"/api/v1/**"
→"\\Q/api/v1/\\E.*"
"/api/v2/**"
→"\\Q/api/v2/\\E.*"
使用
|
或模式组合所有路径正则表达式:→
"\\Q/api/v1/\\E.*|\\Q/api/v2/\\E.*|\\Q/api/foo.ico\\E"
编译regex并使用
matcher.matches()
方法检查传入路径1)
Pattern.quote()
将文本用\Q
和\E
环绕,并正确处理任何嵌入的\E
对# 2 楼答案
你想要达到的目标可以通过正则表达式来实现
与其将URI的每个可能性都添加到列表中,不如将它们添加到正则表达式中以创建模式