PHP preg_match любой текст в URL после определенного слова уже в URL - PullRequest
1 голос
/ 23 марта 2019

Я использую preg_match для вставки модуля joomla в шаблон в любой URL, содержащий слово «категория».

Пример URL: xyz.com/page/category/

Код, который у меня работает, это:

if(preg_match('/category/',$_SERVER['REQUEST_URI']))
echo '<jdoc:include type="modules" name="form" style="xhtml" />';

Я понял, что мне нужно вставить модуль в страницы, которые появляются в URL только после 'category'.

Например: xyz.com/page/category/123-page-after-category

Я пробовал следующее, но оно не работает:

if(preg_match('/category/?.*',$_SERVER['REQUEST_URI']))

1 Ответ

0 голосов
/ 23 марта 2019

Если вам нужно оценить значение true, только если после /category/ есть символы, тогда вам нужно сделать квантификатор «один или несколько» (+) вместо «ноль или более» (*).На самом деле, вам нужно только проверить, есть ли один символ после /category/, поэтому «любой символ» необязательный.

Это способ:

if (preg_match('~/category/.~', $_SERVER['REQUEST_URI'])) {

Сохранитьпомните, что шаблонам регулярных выражений нужны «разделители шаблонов» в php.На этот раз я использовал тильды.Ваш первый шаблон интерпретировался механизмом регулярных выражений как category и рассматривал косые черты как разделители - это означает, что вы могли сопоставлять «scategory-boardgame».

Если вам нужно сопоставление без учета регистра,напишите i после 2-й тильды.(Модификатор шаблона)

Если вам необходимо убедиться, что символы, следующие за /category/, не являются строкой запроса или якорной частью URL-адреса, вы можете отфильтровать ? и #.

~/category/[^?#]~
...