PHP регулярное выражение preg_match для определения шаблона URL - PullRequest
0 голосов
/ 29 сентября 2019

Есть ли способ заставить правило разрешить только примеры 1 и 3, а не все 4 из них?

/^(en\/|)([\d]{1,3})([-])(.+?)([\/])$/

примеры:

  1. 12-blog /
  2. 12-blog / blog2 /
  3. ru / 12-blog /
  4. ru / 12-blog / blog2 /

https://www.phpliveregex.com/p/tFe

1 Ответ

4 голосов
/ 29 сентября 2019

Вы можете использовать необязательную часть для en/ с последующим совпадением 1-3 цифр, - и совпадением не / 1+ раз, используя отрицательный класс символов.

Обратите внимание, что вы можетеопустите квадратные скобки для [\d], [-] и [\/].Если вы выберете разделитель, отличный от /, вам не придется экранировать косую черту.

^(?:en/)?\d{1,3}-[^/]+/$

По частям

  • ^ Начало строки
  • (?:en/)? По выбору соответствует en/
  • \d{1,3} Соответствует 1-3 цифрам
  • - Соответствует буквально
  • [^/]+/ Соответствует 1+ раз любомусимвол за исключением /
  • $ Конец строки

Regex demo | Php demo

...