替换正则表达式的所有匹配项,第一个匹配项除外

时间:2013-11-05 16:16:44

标签: php preg-replace

我不确定这是否仅适用于preg_replace功能,但我想只获取第一张图片并忽略所有其他图像。

此代码排除了我要显示的文字中的所有图片,但我只需要获取第一张图片。

if (!$params->get('image')) {
    $item->introtext = preg_replace('/<img[^>]*>/', '', $item->introtext);
}

请您指出正确的方向来实现这一目标吗?


编辑:

似乎使用limit属性是不够的,因为我不想跳过第一张图片并保留其余图片。我需要相反:保留第一张图像并替换所有其他图像。

1 个答案:

答案 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);