Соответствующая строка, за которой не следует другая строка - PullRequest
0 голосов
/ 12 июня 2018

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

/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 голосов
/ 12 июня 2018

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

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

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

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

RegEx Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...