我在PHP数组中定义了一组过滤器:
$filters = array();
$filters[1] = "STATUS = 'active'";
$filters[2] = "ID != '900'";
$filters[3] = "COUNTRY = 'US'";
//... can be up to 100 filters
我也有一个用户写的表达式:
$filterExp = "1 AND (2 OR 3)";
我想取用户写的表达式,并合并在过滤器数组中创建一个输出字符串,如下所示:
STATUS = 'active' AND (ID != '900' OR COUNTRY = 'US')
有谁能帮我在PHP中使用正则表达式吗?我与它抗争太久了,现在必须寻求帮助。编辑:一直在努力像preg_replace('('d+)', '$filters["$1"]', $filterExp);
,但我知道我错过了一些东西…
$filtersQuery = preg_replace_callback(
'('d+)', function ($matches) use ($filters) {
return $filters[$matches[0]];
}, $filterExp
);
不需要使用preg_replace_callback
,您有一个更快的方式(从远处)使用strtr
:
$filtersQuery = strtr($filterExp, $filters);