[英]Replacing values in string
我有一个字符串,其中包含一定数量的 #{number} 结构。 例如:
#328_#918_#1358
货号:#666:#456
测试--#888/#982
对于每个 #{number} 结构,我必须用已知字符串替换它。
对于第一个示例:
#328_#918_#1358
我有以下字符串:
328 =“富”
918="酒吧"
第1358章
结果应该是:
foo_bar_arg
我怎样才能达到这样的效果? 我当前的代码如下所示:
$matches = array();
$replacements = array();
// starting string
$string = "#328_#918:#1358";
// getting all the numbers from the string
preg_match_all("/\#[0-9]+/", $string, $matches);
// getting rid of #
foreach ($matches[0] as $key => &$feature) {
$feature = preg_replace("/#/", "", $feature);
} // end foreach
// obtaining the replacement values
foreach ($matches[0] as $key => $value) {
$replacement[$value] = "fizz"; // here the value required for replacement is obtained
} // end foreach
但我不知道如何使用 $replacement 表中的值在 $string 变量中实际执行替换。 任何帮助深表感谢!
您可以使用preg_replace_callback
解决方案:
$string = '#328_#918:#1358
SKU:#666:#456
TEST--#888/#982';
$replacements = [328=>"foo", 918=>"bar", 1358=>"arg"];
echo preg_replace_callback("/#([0-9]+)/", function ($m) use ($replacements) {
return isset($replacements[$m[1]]) ? $replacements[$m[1]] : $m[0];
}
,$string);
请参阅PHP 演示。
#([0-9]+)
正则表达式将匹配所有不重叠的#
和一个或多个数字,然后将它们捕获到第 1 组中。如果replacements
关联数组中有一个带有数字键的项目,则整个match 被替换为相应的值。 否则,将返回匹配项,这样就不会发生替换并且匹配项不会被删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.