使用 RegEx 优化字符串占位符替换
函数 dynStr() 旨在搜索并替换给定字符串中的占位符变量,表示为大括号。虽然它可以正确运行,但它的效率和简单性还可以得到提高。
dynStr() 的一个关键问题在于它的 $matches 的双数组结构。使用两个 foreach 循环来访问所需的数据效率很低。考虑简化正则表达式,直接提取占位符变量,而不需要进一步处理:
preg_match_all('/{\w+}/', $str, $matches);
接下来可以优化替换占位符变量的循环。当前的方法使用多个字符串操作操作和数组查找,使其变得不必要的复杂:
foreach($match_group as $match) { // ... $str = ... }
更简单、更简洁的替代方案是使用单个函数调用,直接替换占位符:
foreach($matches[0] as $match) { $str = strtr($str, [$match => $vars[strtolower($match)]]); }
strtr() 函数通过定义占位符变量与其在 $vars 中的相应值之间的映射来有效地执行多次替换
此外,通过将占位符变量和数组键都转换为小写,可以使函数不区分大小写,从而无需进行额外的处理:
$allowed = array_keys(array_change_key_case($vars, CASE_LOWER)); ... $str = (in_array(strtolower($match), $allowed)) ? str_replace("{".$match_up."}", $vars[strtolower($match)], $str) : str_replace("{".$match_up."}", '', $str);
合并这些优化产生更高效、更精简的 dynStr() 函数:
function dynStr($str,$vars) { preg_match_all('/{\w+}/', $str, $matches); foreach($matches[0] as $match) { $vars = array_change_key_case($vars, CASE_LOWER); $str = strtr($str, [$match => $vars[strtolower($match)]]); } return $str; }
以上是如何使用正则表达式优化字符串占位符替换?的详细内容。更多信息请关注PHP中文网其他相关文章!