我正在尝试使用正则表达式验证系统的URI,以在REST API的URI中间标识参数,但是,我在URI末尾遇到参数验证问题,例如:< / p>
在数据库中,我获得了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中使用正则表达式!
答案 0 :(得分:1)
关于您正在使用的模式,需要注意几件事。
在此情况下,/+
中的加号是一个量词,与正斜杠匹配1+倍。 (.*)+
的这一部分还使用该量词来重复一个其自身与任何字符匹配0+倍的组(包括正斜杠)。
我认为您要寻找的是在正斜杠之间以及最后一部分之间使用否定的character class [^/]+
而不是正斜杠,以使url不能以正斜杠。
^/uaa/api/users/[^/]+/city/[^/]+$
请参见regex demo
答案 1 :(得分:0)
其中至少包含以下每个类别中的一个字符。
小写字符 大写字母 数字 符号
(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W)
(?=.*[a-z]) // use positive look ahead to see if at least one lower case letter exists
(?=.*[A-Z]) // use positive look ahead to see if at least one upper case letter exists
(?=.*\d) // use positive look ahead to see if at least one digit exists
(?=.*\W]) // use positive look ahead to see if at least one non-word character exists