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
あなたの表現は間違っています。試してください:
preg_match('/< *img[^>]*src *= *["\']?([^"\']*)/i', $row->introtext, $matches);
Imgとsrcの周りのブラケットの削除とその他のいくつかのクリーンアップに注意してください。
組み込み関数(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
preg_match()
自体を使用する必要がある場合は、これを試してください:
preg_match('/(?<!_)src=([\'"])?(.*?)\\1/',$content, $matches);
試してください:
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.
私が使用した正規表現ははるかに単純です。私のコードは、渡される文字列に、他のマークアップのない1つのimgタグが含まれていることを前提としています。
$pattern = '/src="([^"]*)"/';
詳細については、ここで私の回答を参照してください: phpを使用してhtmlからimg src、title、altを抽出する方法
正規表現は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
これは言う:
クリーンで適切、読みやすく、管理しやすい。