[英]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.