我需要创建一个正则表达式来帮助确定调用API的次数。我们有多个API,此API具有以下格式:
/foo/bar/{barId}/id/{id}
以上端点还支持查询参数,因此以下请求有效:
/foo/bar/{barId}/id/{id}?start=0&limit=10
以下请求也有效:
/foo/bar/{barId}/id/{id}/
/foo/bar/{barId}/id/{id}
我们还有以下端点:
/foo/bar/{barId}/id/type/
/foo/bar/{barId}/id/name/
/foo/bar/{barId}/id/{id}/price
我目前使用/ foo / bar / {barId} / id / {id}提取调用的正则表达式如下所示:
\/foo\/bar\/(.+)\/id\/(?!type|name)(.+)
但上述正则表达式还包括对/foo/bar/{barId}/id/{id}/price
端点的调用。
我可以检查{id} /之后的字符串是不是价格并排除对价格的调用,但它不是长期解决方案,因为如果我们添加另一个端点,我们可能需要更新正则表达式。
有没有办法过滤仅拨打的电话:
/foo/bar/{barId}/id/{id}
/foo/bar/{barId}/id/{id}/
/foo/bar/{barId}/id/{id}?start=0&limit=10
这样/foo/bar/{barId}/id/{id}/price
也没有被拉入?
答案 0 :(得分:0)
\/foo\/bar\/(.+)\/id\/(?!type|name)(.+)
您的RegEx中有一些问题导致您的问题。 "(.+)"
RegEx代码匹配其后的每个字符。因此,请将其替换为"[^/]"
,并添加以下代码"/?(?!.+)"
。这对我有用。
/foo/bar/([^/]+)/id/(?!type|name)([^/]+)/?(?!.+)