我正在使用一个使用preg_replace
函数的函数,如下所示:
function replace($pattern, $replacement, $subject){
preg_replace("/^$pattern$/", $replacement, $subject);
}
replace('(w+)/((w+)/)?', 'name=1&family=2', 'Jame/');
我不能编辑replace
函数,只是应该做一些参数。
如您所见,第二种模式((w+)/)?
是可选的,可能不存在。我想知道如果模式不存在,是否有办法得到没有family
的结果,这意味着2
是空的。
所以我应该写:
'name=Jame'
注意
我不能改变preg_replace
签名或使用替代功能duo团队合作的限制。查找replacement pattern
对于preg_replace
,不要使其为可选的,而要使其显式。处理这两种情况:
$pattern = [
'((w+)/(w+)/)',
'((w+)/)',
];
$replacement = [
'name=1&family=2',
'name=1',
];
echo preg_replace($pattern, $replacement, 'Jame/');
另一种选择是匹配所有部分,然后用第二个数组为它们命名,但根据匹配的数量对该数组进行切片。
我想你应该给preg_replace_callback
一个尝试(http://php.net/manual/en/function.preg-replace-callback.php)。
$name = preg_replace_callback(
'/(w+)/(?:(w+)/)?/',
create_function(
'$matches',
'return "name={$matches[0]}" . ( !$matches[1] ? '' : "&family={$matches[1]}" );'
),
'Jame/'
);
此代码尚未测试…只是一个想法