我不确定这是否仅适用于preg_replace
功能,但我想只获取第一张图片并忽略所有其他图像。
此代码排除了我要显示的文字中的所有图片,但我只需要获取第一张图片。
if (!$params->get('image')) {
$item->introtext = preg_replace('/<img[^>]*>/', '', $item->introtext);
}
请您指出正确的方向来实现这一目标吗?
编辑:
似乎使用limit
属性是不够的,因为我不想跳过第一张图片并保留其余图片。我需要相反:保留第一张图像并替换所有其他图像。
答案 0 :(得分:3)
您可以使用preg_replace_callback来完成此操作。此函数将执行您作为参数传递的回调函数,该函数将为其在原始字符串中找到的每个匹配返回替换字符串。
在这种情况下,我们将在第一次出现时返回自己的匹配,因此不会被替换。
$i = 0;
$item->introtext = preg_replace_callback('/<img[^>]*>/', function($match) use (&$i) {
if ($i++ == 0) // compares $i to 0 and then increment it
return $match[0]; // if $i is equal to 0, return the own match
return ''; // otherwise, return an empty string to replace your match
}, $item->introtext);