”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何使用正则表达式优化字符串占位符替换?

如何使用正则表达式优化字符串占位符替换?

发布于2024-12-14
浏览:133

How Can I Optimize String Placeholder Substitution Using Regular Expressions?

使用 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;
}
最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3