Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式-匹配URL路径,但不包括最终斜杠(如果存在)_Regex - Fatal编程技术网

Regex 正则表达式-匹配URL路径,但不包括最终斜杠(如果存在)

Regex 正则表达式-匹配URL路径,但不包括最终斜杠(如果存在),regex,Regex,我有一个url路径,可以采用路径字符串开头以/api/开头的形式,然后可以采用任何有效的路径形式,例如: /api/test /api/test/ /api/test/best/ /api/test/best ...etc 我想说的是: test test test/best test/best 也就是说,我希望正则表达式在/api/之后给出所有内容,但如果路径中有最后一个斜杠,则将其排除在外。我的意思是,如果它是字符串中的最终终止字符,则会存在最终斜杠-而不是字符串本身的最终/注意,第四个

我有一个url路径,可以采用路径字符串开头以/api/开头的形式,然后可以采用任何有效的路径形式,例如:

/api/test
/api/test/
/api/test/best/
/api/test/best
...etc
我想说的是:

test
test
test/best
test/best
也就是说,我希望正则表达式在/api/之后给出所有内容,但如果路径中有最后一个斜杠,则将其排除在外。我的意思是,如果它是字符串中的最终终止字符,则会存在最终斜杠-而不是字符串本身的最终/注意,第四个示例没有限定符/在这种情况下-它以t结尾,最好不是整个字符串的终止斜杠

我已经接近了,但不是我想要的。我要么总是包含终止斜杠,要么在字符串中找到第一个/后停止。注意,url可以在api之后的路径中有多个斜杠分隔多个术语,而不仅仅是两个术语


另外,如果路径不是以/api/开头,请给出一个不起作用的答案,谢谢

以下正则表达式将按照您的意愿执行:

\/api\/.*=$|\/$

详情:

\/api\/:匹配/api/url部分

*?:尽可能多地匹配非贪婪

?=$\/$最后一个字符可以是行尾或尾随斜杠,使用带非贪婪匹配的正向前瞻将根据需要执行

你可以用

/api/(.*?)/?$
请参阅和:

细节

/api/-a子字符串 .*? - 第1组:除换行符以外的任何零个或多个字符尽可能少 /? - 可选的/ $-字符串结尾 另一种方法是将所有字符匹配到最后一个非斜杠字符:

/api/(.*[^/])

看。在这里,.[^/]将除换行符以外的任何零个或多个字符尽可能多地捕获到组1中,直到最后一个字符,而不是/

?或者对于完整的字符串匹配^\/api\/.+\/.$@JerryJeremiah,我在这里对您的正则表达式进行了测试--它返回您不希望/api/或尾随斜杠匹配的尾随斜杠,因此匹配组1只包含介于两者之间的部分。所以我想你应该用第一组比赛。但是,如果你想让整个匹配不包括这些部分,那么环顾四周就是答案。@JerryJeremiah在该正则表达式测试程序中,当应用你的答案时,终止的尾随斜杠将包含在第1组中。我相信它需要四处看看,但不确定如何做才能工作。它包括/api/和尾随斜杠,因为它显示了整个匹配,而不是第一组匹配。此正则表达式匹配除最后一个斜杠以外的所有字符,但包括/api/part:.*?