14

次のような HTML テキストのブロックで、画像の最初の src 属性を抽出しようとしています。

Lorem ipsum <img src="http://example.com/img.jpg" />consequat.

src 属性に一致する正規表現を作成するのに問題はありませんが、最初に一致した src 属性を置き換えるのではなく、どのように返すのですか?

PHP のマニュアルを調べてみると、 preg_filter()でうまくいくように思えますが、エンド ユーザーが PHP > 5.3 を使用しているとは限りません。

他のすべての PHP 正規表現関数は、ブール値を返す preg_match()、または一致を何かに置き換える preg_replace のバリエーションのようです。PHPで正規表現の一致を返す簡単な方法はありますか?

4

1 に答える 1

32

の 3 番目のパラメーターを使用して、preg_match何が一致したかを知ることができます(参照渡しの配列です)

int preg_match  ( string $pattern  , 
    string $subject  [, array &$matches  [, 
    int $flags  [, int $offset  ]]] )

一致が提供された場合は、検索結果が入力されます。 $matches[0]完全なパターンに一致したテキストが含まれ、$matches[1] 最初にキャプチャされた括弧で囲まれたサブパターンに一致したテキストが含まれます。


たとえば、コードのこの部分では:

$str = 'Lorem ipsum dolor sit amet, adipisicing <img src="http://example.com/img.jpg" />consequat.';

$matches = array();
if (preg_match('#<img src="(.*?)" />#', $str, $matches)) {
    var_dump($matches);
}

次の出力が得られます。

array
  0 => string '<img src="http://example.com/img.jpg" />' (length=37)
  1 => string 'http://example.com/img.jpg' (length=23)

(私の正規表現は過度に単純化されていることに注意してください-そして、HTML文字列からデータを抽出する場合、正規表現は一般に「適切なツール」ではありません...)

于 2009-11-11T15:23:18.457 に答える