#php #preg-match-all
#php #предварительный просмотр-совпадение-все #preg-match-all
Вопрос:
Я не знаю, что добавить к моему регулярному выражению, чтобы оно соответствовало только «точным» шаблонам. #users/(. ?)/#
с этой строкой users/john/someweirdstuff/
будет совпадение.
Я получаю ‘ john
‘, а не ‘ john/someweirdstuff
‘ (что является хорошим шагом в правильном направлении), но я не хочу, чтобы это совпадало вообще. Потому что строка (которая должна быть URL-адресами) не является одной и той же.
Итак, в принципе, что мне добавить за моим reg exp, чтобы там было написано «после последней косой черты ничего не должно быть»?
Комментарии:
1. Вы должны добавить немного своего кода и привести примеры с URL-адресами и тем, что из них сопоставить.
2. Вероятно, вам просто нужно добавить
$
в конце, чтобы соответствовать концу строки.
Ответ №1:
Вы должны использовать $
символ, который соответствует концу строки.
Вам также следует избегать сопоставления «любого символа ( .
)», и вы должны сопоставлять «любой символ, который не является косой чертой ( [^/]
). Как показано в примере).
Также обратите внимание, что я опустил вопросительный знак ( ?
), вопросительный знак в этом случае изменяет соответствие символов с жадного (совпадение как можно большего количества) на ленивый (совпадение как можно меньшего количества).
Используйте это так:
#users/([^/] )/$#
Комментарии:
1. Итак, я попробовал, прочитав это в документах. Но он все равно будет совпадать, и это заставит мой подстановочный знак выбрать ‘john / someweirdstuff’
Ответ №2:
Если вы хотите сказать «после последней косой черты ничего не должно быть», скажите «строка заканчивается после последней косой черты», т. Е. #users/(. )/$#
. Исключение вопросительного знака также должно сработать, делая знак плюс «жадным», т. Е. совпадающим настолько, насколько это возможно.