我正在测试phpList中的str_replace,我想替换字符串的第一个匹配项。我在其他帖子上发现如果我想替换字符串的第一个匹配,我应该使用preg_replace,问题是preg_replace由于某种原因没有返回字符串。
两个
$fp = fopen('/var/www/data.txt', 'w');
$string_test = preg_replace(basename($html_images[$i]), "cid:$cid", $this->Body,1);
fwrite($fp,$string_test);
fclose($fp);
和
$fp = fopen('/var/www/data.txt', 'w');
fwrite($fp,preg_replace(basename($html_images[$i]), "cid:$cid", $this->Body,1));
fclose($fp);
将空字符串写入文件。我想知道如何获取返回字符串,str_replace似乎不适用于第一次匹配。但是,str_replace将返回一个字符串。
答案 0 :(得分:0)
preg_replace()' s正则表达式匹配并替换。您传递的是字符串而不是有效的RegEx作为第一个参数。
相反,您可能正在寻找替换字符串的str_replace()。
答案 1 :(得分:0)
实际上,preg_replace()
是错误的工具,如果您只想执行常规查找&更换操作。您可以使用strpos()
和substr_replace()
执行单个替换:
$find = basename($html_images[$i]);
$string_test = $this->Body;
if (($pos = strpos($string_test, $find)) !== false) {
$string_test = substr_replace($string_test, "cid:$cid", $pos, strlen($find));
}
使用preg_replace()
,你会得到这样的结果:
$string_test = preg_replace('~' . preg_quote(basename($html_images[$i], '~') . '~', "cid:$cid", $this->Body, 1);
为方便起见,您可以将两个包装成一个名为str_replace_first()
的函数。