首页 > 解决方案 > 正则表达式验证 URI 中的参数

问题描述

我正在尝试使用正则表达式验证系统的 URI,以识别 REST API 的 URI 中间的参数,但是,我在 URI 末尾遇到参数验证问题,例如:

在数据库中,我得到了 URI 的规则:/uaa/api/users/*/city/*

将“*”替换为正则表达式,使其接受 / 之间或 / 之后的任何字符:^/uaa/api/users/+(.*)+/city/+(.*)$

我将带有正则表达式的 URI 与请求 URI 进行比较:/uaa/api/users/john.connor/city/12

但是,如果我删除 URI 末尾的值并只留下 / 它接受我需要它失败,因为 / 之后没有值,也就是说,当使用^/uaa/api/users/+(.*)+/city/+(.*)$带有/uaa/api/users/john.connor/city/URI 的正则表达式时,我需要它失败,因为/之后没有任何价值。我该怎么做才能让他不接受最后跟随的毫无价值的酒吧?

我不知道这是否重要,但我在 Java 中使用正则表达式!

标签: javaregex

解决方案


关于您使用的模式,有几点需要注意。

在此上下文中,加号/+是一个量词,匹配正斜杠的 1+ 倍。这部分(.*)+还使用该量词重复一个组,该组本身匹配 0+ 次任何字符(包括正斜杠)。

我认为您正在寻找的是在正斜杠之间和最后一部分之间使用否定字符类 [^/]+来匹配不匹配正斜杠,以便 url 不能以正斜杠结尾。

^/uaa/api/users/[^/]+/city/[^/]+$

查看正则表达式演示


推荐阅读