preg_match_all слишком сильно совпадает

#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/(. )/$# . Исключение вопросительного знака также должно сработать, делая знак плюс «жадным», т. Е. совпадающим настолько, насколько это возможно.