[英]Regex to match URL Path pattern
我有 2 个 URI 模式及其正则表达式:
1. "/api/orders/{id}/{version}" -> "^/api/orders/.+/.+$"
2. "/api/orders/{id}" -> "^/api/orders/.+$"
但是对于上面的正则表达式,字符串/api/orders/123-blah$-789/v1
匹配正则表达式模式 1 和 2。
我可以使用什么正则表达式使上面的字符串只匹配模式 1 的正则表达式而不匹配模式 2?
(路径可能是也可能不是 URL 编码)
你可以用这个替换你的第二个正则表达式:
^\/api\/orders\/[[\p{Alnum}\p{Punct}]&&[^\/]]+$
基本上,它接受orders/
之后的每个符号或字母字符,除非那里有斜线。 像这样,您可以保证orders/
后面只有一个子路径。
这是测试正则表达式的链接:
https://regex101.com/r/KMEeXX/2
同样,第一个正则表达式可以在与第二个相同的前提下重写:
^\/api\/orders\/.+/[[\p{Alnum}\p{Punct}]&&[^\/]]+$
这是一个测试它的链接:
这可能看起来有点硬编码,但可以完成工作。
我个人更喜欢正则表达式非常具体。
Pattern p = Pattern.compile("^/api/orders/.+/.+$");
Pattern q = Pattern.compile("^/api/orders/[^/]+$");
System.out.println(p.matcher("/api/orders/123-456-789/v1").matches());
System.out.println(q.matcher("/api/orders/123-456-789/v1").matches());
System.out.println(p.matcher("/api/orders/123-456-789").matches());
System.out.println(q.matcher("/api/orders/123-456-789").matches());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.