我有一个解析一些文本的函数,并将"{
和}"
包围的所有标记替换为数组中的值。
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);
}
如何修改它来做同样的事情,还要使用第二个分隔符?具体来说,我还要用它来替换{{1}}和'{
答案 0 :(得分:1)
试试这个:
/\{['"]{\ (\w+)\ \}['"]/
答案 1 :(得分:1)
像这样(没有检查)/\{("|\'){\ (\w+)\ \}\1/
或/\{(["\']){\ (\w+)\ \}\1/
答案 2 :(得分:1)
更好的选择是明确列出可能的分隔符:
$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;