web-dev-qa-db-ja.com

preg_matchを使用したIMGタグのSRC属性のマッチング

Preg_matchを実行して、記事の最初のIMGタグ(この場合は、$ row-> introtextに格納されている)からSRC属性を抽出しようとしています。

preg_match('/\< *[img][^\>]*[src] *= *[\"\']{0,1}([^\"\']*)/i', $row->introtext, $matches);

のようなものを得る代わりに

images/stories/otakuzoku1.jpg

から

<img src="images/stories/otakuzoku1.jpg" border="0" alt="Inside Otakuzoku's store" />

私はちょうど得ます

0

正規表現は正しいはずですが、src属性ではなくborder属性と一致しているように見える理由はわかりません。

または、返信フィールドに直接スキップして「HTML/XMLパーサーを使用する」と入力せずに、ここまで読む忍耐力がある場合は、1つを見つけるのに苦労しているので、チュートリアルをお勧めしますか? PHP 4.に適用されます。

PHP 4.4.7

14
KyokoHunter

あなたの表現は間違っています。試してください:

preg_match('/< *img[^>]*src *= *["\']?([^"\']*)/i', $row->introtext, $matches);

Imgとsrcの周りのブラケットの削除とその他のいくつかのクリーンアップに注意してください。

35
CalebD

組み込み関数(php> = 4)でこれを行う方法は次のとおりです。

$parser = xml_parser_create();
xml_parse_into_struct($parser, $html, $values);
foreach ($values as $key => $val) {
    if ($val['tag'] == 'IMG') {
        $first_src = $val['attributes']['SRC'];
        break;
    }
}

echo $first_src;  // images/stories/otakuzoku1.jpg
5
GZipp

preg_match()自体を使用する必要がある場合は、これを試してください:

 preg_match('/(?<!_)src=([\'"])?(.*?)\\1/',$content, $matches);
3
Ajmal Salim

試してください:

include ("htmlparser.inc"); // from: http://php-html.sourceforge.net/

$html = 'bla <img src="images/stories/otakuzoku1.jpg" border="0" alt="Inside Otakuzoku\'s store" /> noise <img src="das" /> foo';

$parser = new HtmlParser($html);

while($parser->parse()) {
    if($parser->iNodeName == 'img') {
        echo $parser->iNodeAttributes['src'];
        break;
    }
}

生成されます:

images/stories/otakuzoku1.jpg

PHP 4.x.

2
Bart Kiers

私が使用した正規表現ははるかに単純です。私のコードは、渡される文字列に、他のマークアップのない1つのimgタグが含まれていることを前提としています。

$pattern = '/src="([^"]*)"/';

詳細については、ここで私の回答を参照してください: phpを使用してhtmlからimg src、title、altを抽出する方法

1
WNRosenberg

正規表現はdom-ignorantであるため、このタスクはdomパーサーで実行する必要があります。

コード:( デモ

$row = (object)['introtext' => '<div>test</div><img src="source1"><p>text</p><img src="source2"><br>'];

$dom = new DOMDocument();
$dom->loadHTML($row->introtext);
echo $dom->getElementsByTagName('img')->item(0)->getAttribute('src');

出力:

source1

これは言う:

  1. HTML文字列全体を解析する
  2. すべてのimgタグを分離する
  3. 最初のimgタグを分離する
  4. Src属性値を分離する

クリーンで適切、読みやすく、管理しやすい。

1
mickmackusa
0
frops