匹配字符串后没有跟另一个字符串

Match string not followed by another string

我正在尝试匹配一个字符串。例如,在下面的字符串中,第一个应该匹配,第二个不应该匹配。

/users/akinuri/
/users/akinuri/asd/

我试过负前瞻,但没有用。显然我做错了什么。

if (preg_match("/\/users\/.*?\/(?!.*\/)/", "/users/akinuri/asd/")) {
    echo "match";
}

我正在试验(尝试创建路线系统)。现在,我只是想确定请求的 uri 是否有效。如果访问者请求第二个字符串,它应该 return false 并且我将 return 一个未找到的页面。例如,在 SO 上测试这个。第二个 url return 是一个未找到的页面。

https://whosebug.com/users/2202732/akinuri/
https://whosebug.com/users/2202732/akinuri/asdasd

那么,我可以使用正则表达式进行此项检查吗?如果是这样,如何?我做错了什么?

或者我应该拆分文本然后做进一步检查?这似乎有点多余。

您不需要对此进行展望。您可以使用否定字符 class [^/]+ 来匹配除 / 之外的任何字符的 1+。您还需要在正则表达式中使用锚点以确保匹配完整的输入。

对于 PHP 代码,您可以使用此正则表达式:

'~^/users/[^/]+/?$~'

请注意 /?$ 使尾部斜杠成为可选匹配项。

RegEx Demo