正则表达式区分API

时间:2018-01-22 19:44:13

标签: regex

我需要创建一个正则表达式来帮助确定调用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也没有被拉入?

1 个答案:

答案 0 :(得分:0)

\/foo\/bar\/(.+)\/id\/(?!type|name)(.+)

您的RegEx中有一些问题导致您的问题。 "(.+)" RegEx代码匹配其后的每个字符。因此,请将其替换为"[^/]",并添加以下代码"/?(?!.+)"。这对我有用。

/foo/bar/([^/]+)/id/(?!type|name)([^/]+)/?(?!.+)