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

时间:2018-06-12 14:42:59

标签: php regex string url lookahead

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

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

我尝试过一种消极的前瞻,但它没有用。显然我做错了。

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

RegEx Demo