我有一个函数,它解析一些文本,并用数组中的值替换被"{
和}"
包围的任何标记。
function parse($template, array $values) {
return preg_replace_callback('/'{"{' ('w+)' '}'"/',function ($matches) use ($values) {
return isset($values[$matches[1]])?$values[$matches[1]]:$matches[0];
},
$template);
}
它怎么能被修改为同样的,但也使用第二个除法器?具体来说,我还用它来替换由'{
和}'
包围的标签
一个更好的选择是显式列出可能的分隔符:
$re = <<<RE
/
"{ ('w+) }"
|
'{ ('w+) }'
/x
RE;
(为了可读性,使用扩展语法)。实际捕获的组将位于matches
阵列的末尾:
preg_replace_callback($re, function ($matches) use ($values) {
$word = end($matches);
if (isset($values[$word])) etc....
},
一旦引入更多的分隔符,尤其是非对称分隔符,这种冗长的描述就会得到回报,例如:
$re = <<<RE
/
"{ ('w+) }"
|
'{ ('w+) }'
|
<{ ('w+) }>
|
{{ ('w+) }}
/x
RE;
类似的东西(未检查)/'{("|''){' ('w+)' '}'1/
或/'{(["'']){' ('w+)' '}'1/
试试这个:
/'{['"]{' ('w+)' '}['"]/