正则表达式使用两个单独的模式

时间:2014-10-02 20:28:44

标签: php regex preg-replace

我有一个解析一些文本的函数,并将"{}"包围的所有标记替换为数组中的值。

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}}和'{

所包围的标签

3 个答案:

答案 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;