preg_match_all слишком много соответствует - PullRequest
0 голосов
/ 06 ноября 2011

Я не знаю, что добавить к моему регулярному выражению, чтобы оно соответствовало только «точным» шаблонам. #users/(.+?)/# с этой строкой users/john/someweirdstuff/ будет совпадением.

Я получаю 'john', а не 'john/someweirdstuff' (что является хорошим шагом в правильном направлении), но я не хочу, чтобы оно совпадало вообще. Потому что строки (которые должны быть URL) не совпадают.

Итак, в общем, что я добавляю к моему reg exp, чтобы он говорил: «после последней косой черты ничего не должно быть»

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

Вы должны использовать символ $, который соответствует концу строки .

Вам также следует избегать совпадения с «любым символом (.)», и вы должны соответствовать »любой символ, который не является косой чертой ([^/]). Как показано в примере).

Также обратите внимание, что я опустил знак вопроса (?), знак вопроса в этом случае изменяет сопоставление символов сжадный (соответствует как можно больше), чтобы ленивый (соответствует как можно меньше).

Используйте это так:

#users/([^/]+)/$#
0 голосов
/ 06 ноября 2011

Если вы хотите сказать «после последней косой черты не должно быть ничего», скажите «строка заканчивается после последней косой черты», то есть #users/(.+)/$#. Пропуск знака вопроса также должен работать, делая знак «плюс» «жадным», т. Е. Соответствует как можно больше.

...