Соответствующая строка, за которой не следует другая строка

Я пытаюсь сопоставить строку. Например, в следующих строках первое должно совпадать, второе — нет.

/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

Итак, я могу сделать эту проверку с помощью регулярных выражений? Если так, то как? Что я делаю неправильно?

Или я должен разделить текст, а затем сделать дополнительные проверки? Это кажется немного излишним.

0

Решение

Вам не нужно заглядывать для этого. Вы можете использовать отрицательный класс символов [^/]+ соответствовать 1+ любого персонажа, кроме /, Вам также нужно использовать якоря в регулярных выражениях, чтобы убедиться, что вы соответствуете полному вводу.

Для PHP-кода вы можете использовать это регулярное выражение:

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

Обратите внимание, что /?$ делает косую черту необязательным совпадением.

RegEx Demo

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]