使用preg_replace'如果'pattern`不匹配,删除'replacement'

Omi*_*mid 0 php regex preg-replace

我正在使用一个使用preg_replace如下函数的函数:

function replace($pattern, $replacement, $subject){
    preg_replace("/^$pattern$/", $replacement, $subject);
}

replace('(\w+)/((\w+)/)?', 'name=\1&family=\2', 'Jame/');
Run Code Online (Sandbox Code Playgroud)

我无法编辑replace函数,只能用参数做一些事情.
如您所见,第二个模式((\w+)/)?是可选的,可能不存在.我想知道是否有方法可以得到一个结果,family如果不存在模式,那就意味着它\2是空的.

所以我应该:

'name=Jame'
Run Code Online (Sandbox Code Playgroud)

注意
我无法更改preg_replace签名或使用替代功能二人组合限制.寻找一个replacement pattern如果存在.

hak*_*kre 5

因为preg_replace,不要使它成为可选,明确表示.处理这两种情况:

$pattern     = [
    '((\w+)/(\w+)/)',
    '((\w+)/)',
];

$replacement = [
    'name=\1&family=\2',
    'name=\1',
];

echo preg_replace($pattern, $replacement, 'Jame/');
Run Code Online (Sandbox Code Playgroud)

另一种选择是匹配所有部分,然后给它们一个带有第二个数组的名称,但是根据匹配数量对它进行切片.取决于您想要替换哪个字段.