В вашем паттерне вы используете 2 чередования, где у вас нет значения после последнего |
.Часть http или https может быть сокращена до https?и эта часть, включающая www.
, не обязательно должна входить в группу без захвата (?:
.
. Вы можете переместить косую черту в группу, чтобы сопоставить страницы или группы и сделать группу необязательной, используя вопросотметка.Затем сопоставьте дополнительную косую черту в конце.
Если вы используете другой разделитель, тогда /
, как ~
, не обязательно экранировать косую черту.
Ваше регулярное выражение может выглядеть следующим образом:
^https://www\.facebook\.[a-z.]+/(?:pages/|groups/)?[\w-]+/?$
Regex demo | Php demo
Например:
$pattern = '~^https://www\.facebook\.[a-z.]+/(?:pages/|groups/)?[\w-]+/?$~';
Если вы хотите сопоставить больше, но не параметры строки запроса, вы можете сопоставить 1+, а не знак вопроса или пробелchar с использованием отрицательного класса символов [^?\s]+
.
^https://www\.facebook\.[a-z.]+/(?:pages/|groups/)?[^?\s]+$
Regex demo | Php demo