15

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

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 パーサーを使用する」と入力せずにここまで読む忍耐力がある場合は、適切なチュートリアルをお勧めできますか? PHP 4 に適用されます。

PHP 4.4.7

4

6 に答える 6

44

あなたの表現は正しくありません。試す:

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

img と src を囲む括弧の削除と、その他のクリーンアップに注意してください。

于 2010-02-01T21:45:18.600 に答える
5

組み込み関数 (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
于 2010-02-01T22:23:36.610 に答える
3

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

 preg_match('/(?<!_)src=([\'"])?(.*?)\\1/',$content, $matches);
于 2013-06-28T18:09:31.757 に答える
2

試す:

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 で動作するはずです。

于 2010-02-01T21:50:31.383 に答える
1

私が使った正規表現はもっと単純でした。私のコードでは、渡される文字列には、他のマークアップを持たない img タグが 1 つだけ含まれていると想定しています。

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

詳細については、私の回答を参照してください: How to extract img src, title and alt from html using php?

于 2010-09-28T17:08:28.873 に答える