存在或将值放入 preg_match()

Exists or put value in preg_match()

我有这个与 preg_match():

一起使用的正则表达式
^#admin#products#p-([0-9]+)$/

如果 p-([0-9]+) 未找到,如何在此正则表达式中输入 p-1?

编辑

对于:

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

$mathes 将

array(
    [0] => '3'
)

而对于

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

我希望 $mathes 成为

array(
    [0] => '1'
)

我在 中提到的方法是您可以将 $result 输出变量设置为 1 并使用包含在可选组中的 p-([0-9]+) 的模式: (?:p-([0-9]+))?。如果Group 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 demo,输出为 3,因为第 1 组匹配。如果没有匹配,$res 将保持 1.