我使用以下代码匹配除 i 和 d 之外的所有字母。
/{([abcefghj-z]+)}/
如何更改它以便 i 和 d 可以存在但不能按顺序存在(id)。
示例字符串:
/admin/users/{type}/{id}/edit
在上面的例子中只会替换{type}。
示例2:
/admin/users/{type}/{id}/{supplied}/edit
在上面的示例中,{type}和{supplied}都会匹配。
这是否可以使用正则表达式?
更新
我正在使用的代码如下:
$current = 'admin/users/{type}/{id}/changePassword';
$parameters = array('type' => 'administrators', 'id' => '1');
$path = preg_replace_callback('~\{(?!id\})[a-z]+\}~', function ($m) use ($parameters) {
return $parameters[$m[1]];
}, $current);
答案 0 :(得分:1)
这是一个适合您的解决方案:您需要使用capturing group(因此我在([a-z]+)
中添加了圆括号)才能获得您需要的值,我发现您需要执行以不区分大小写的方式搜索(因此,我添加了~i
):
$current = 'admin/users/{type}/{id}/changePassword';
$parameters = array('type' => 'administrators', 'id' => '1');
$path = preg_replace_callback('~\{(?!id\})([a-z]+)\}~i', function ($m) use ($parameters) {
// ^ ^ ^
return $parameters[$m[1]];
}, $current);
echo $path;
请参阅IDEONE demo
使用捕获组,$m[1]
将保持"键入",这样您就可以正确地从数组中获取值。
答案 1 :(得分:0)