Я пытаюсь сопоставить строку. Например, в следующих строках первое должно совпадать, второе — нет.
/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+ любого персонажа, кроме /
, Вам также нужно использовать якоря в регулярных выражениях, чтобы убедиться, что вы соответствуете полному вводу.
Для PHP-кода вы можете использовать это регулярное выражение:
'~^/users/[^/]+/?$~'
Обратите внимание, что /?$
делает косую черту необязательным совпадением.
Других решений пока нет …