如果'pattern` does not match, using preg_replace',请删除'replacement'



我正在使用一个使用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/'
);

此代码尚未测试…只是一个想法

相关内容

  • 没有找到相关文章

最新更新