0

これが関数でのみ可能かどうかはわかりませんpreg_replaceが、最初の画像のみを取得し、他のすべてを無視したいと思います。

このコードは、表示したいテキスト内のすべての画像を除外しますが、取得する必要があるのは最初の画像だけです。

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

これを達成するための正しい方向を教えてください。


編集 :

limit最初の画像をスキップして残りを保持したくないので、プロパティを使用するだけでは不十分なようです。反対のことが必要です。最初の画像を保持し、他のすべてを置き換えます。

4

1 に答える 1

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);
于 2013-11-05T16:18:52.557 に答える