Существует или положить значение в preg_match () - PullRequest
0 голосов
/ 05 июня 2018

У меня есть это регулярное выражение, которое я использую с preg_match():

^#admin#products#p-([0-9]+)$/

Как сделать в этом регулярном выражении, если p-([0-9]+) не найден, положить p-1?

Редактировать

Для:

preg_match(^#admin#products#p-([0-9]+)$/, '/^admin#products#p-3$/', $matches)

$ совпадений будет

array(
    [0] => '3'
)

А для

preg_match(^#admin#products#p-([0-9]+)$/, '/^admin#products$/', $matches)

я хочу, чтобы $ соответствий было

array(
    [0] => '1'
)

1 Ответ

0 голосов
/ 05 июня 2018

Подход, который я упоминаю в моем комментарии , заключается в том, что вы можете установить $result выходную переменную на 1 и использовать шаблон с p-([0-9]+), заключенным в необязательную группу: (?:p-([0-9]+))?.Если значение группы 1 не является пустым, установите его на $matches[1], иначе оно останется 1:

$res = '1';
if (preg_match('~\^admin#products#(?:p-([0-9]+))?~', '/^admin#products#p-3$/', $matches)) {
    if (!empty($matches[1])) { 
        $res = $matches[1];
    }
}

См. PHP-демо , результат будет 3 в соответствии с группой 1В случае отсутствия совпадения $res будет удерживать 1.

...