【发布时间】:2014-11-17 01:34:46
【问题描述】:
我有以下 PHP 代码为预定义列表中的图像生成 HTML 代码:
$message = "thing.png, other.jpg, other.jpg, other.jpg, last.tiff, thing.png";
$keywords = array("thing.png", "other.jpg");
foreach ($keywords as &$value) $value = "/(".$value.")/";
echo $message = preg_replace($keywords, '<img src="images/$1" />', $message, 2);
我添加了一个2 以限制preg_replace 最多进行两次替换。
这将产生以下输出:
<img src="images/thing.png">, <img src="images/other.jpg">, <img src="images/other.jpg">, other.jpg, last.tiff, <img src="images/thing.png">
我想要这个:
<img src="images/thing.png">, <img src="images/other.jpg">, other.jpg, other.jpg, last.tiff, thing.png
请注意,我希望的行为将 preg_replace 限制为两个替换总计,而不是每个阵列(或针)两个替换。
您能帮我将代码限制为两个替换吗?这是preg_replace_callback 的用途吗?
我的最终代码:
$message = "thing.png, other.jpg, other.jpg, other.jpg, last.tiff, thing.png";
$keywords = array("thing.png", "other.jpg");
$regexp = "/".implode("|", array_map("preg_quote", $keywords))."/";
echo $message = preg_replace($regexp, '<img src="images/$0" />', $message, 2);
【问题讨论】:
-
/thing.png|other.jpg/PS:你可能还需要申请preg_quote
标签: php replace preg-replace preg-replace-callback