我正在尝试实现一个管理界面,经理可以在其中创建网站元标记形成的高级规则。
我有一个函数,它采用模板并用 $registry 中的值替换其中的占位符,并在需要时应用修饰符。
$registy = array( 'profession_name' => 'actor', 'total_found' => 100, );
$result = preg_replace_callback('/\{([^{}:]+)(:[^{}:]+)?\}/', function($matches) use ($registry) {
$result = $registry[$matches[1]] ?: $matches[0];
if (in_array($matches[2], array(':ucfirst', ':strtolower', ':strtoupper', ':lcfirst')))
{
$result = call_user_func(substr($matches[2], 1), $result);
}
return $result;
},
$template);
Example:
职业 {name:ucfirtst} 是 {profession_name:strtoupper}
被划分为
职业名称是演员
我正在尝试实施条件,因此可以制定如下规则:
条件前带有 {placeholdes} 的文本。 [{total_found},带有 {placeholders} 的 TRUE 文本,带有 {placeholders} 的 FALSE 文本],条件后带有 {placeholders} 的尾随文本。
因此,我的函数将从注册表中获取 {total_found} 值,并根据它是 true 还是 false 将返回具有相应 false 或 true 模式的字符串。
我不擅长正则表达式,并且不知道如何用正则表达式术语编写这个条件。
请帮帮我。
更新:
具体示例如下所示:
$template = 'Profession is {profession_name}. [{total_found}, {total_found} vacancies found, No vacancies found]. {profession_name} in your town';
在我的回调函数中我会放置一个像这样的条件
if ($matches[condition]) // i don't no how exactly
$result = $matches[true-condition];
else
$result = $matches[false-condition]
所以万一$registry['total_found'] = 100;
最终结果将是“职业是演员”。已找到 100 个职位空缺。你镇上的演员»。
以防万一$registry['total_found'] = 0;
最终结果将是“职业是演员”。没有找到职位空缺。你镇上的演员»。