2012-01-29 9 views
1

PHPで指定されたテキストから最初のイメージリンクをエクスポートします。のは、私はこのようなテキストがあるとしましょう:PHPで指定されたテキストから最初のイメージリンクをエクスポートするには?

Lorem ipsum <img rel="lorem" src="lorem.jpg"/> dolor sit amet, consectetuer <IMG src="ipsu.jpg" rel="ipsum"/ > 

私はPHPで変数にlorem.jpgをエクスポートする必要があります。たとえば、最終的に$variablelorem.jpgに等しくなければなりません。
正規表現、striposなどの関数を使用しましたが、問題が発生するたびに使用されました。
これを解決することをお考えの場合は、助けてください。

+0

可能な重複:http://stackoverflow.com/questions/3577641/how-to-parse-and-process-html-with-php – cspray

答えて

3

正規表現は、さまざまなタスクに適していますが、通常、HTML DOMを解析するときに失敗します。 HTMLの問題は、文書の構造が非常に可変であるため、タグを正確に抽出することが難しいことです。あなたも同じように、画像のalt属性を取得することができます

$html = 'Lorem ipsum <img rel="lorem" src="lorem.jpg"/> dolor sit amet, consectetuer <img src="ipsu.jpg" rel="ipsum"/ > '; 

$first_image_source = get_first_image($html); 
echo $first_image_source; 

function get_first_image($html){ 

    require_once('simple_html_dom.php'); 

    $post_dom = str_get_html($html); 

    $first_img = $post_dom->find('img', 0); 

    if($first_img !== null) { 
     return $first_img->src; 
    } 

    return null; 
} 

私たちは、あなたが好きそれを使用することができ、そのようなSimpleHTML

としてDOMパーサを使用することができます。あなたはすべての画像のソースを取得したい場合は

、あなたが使用することができます。このことができます

function get_images($html){ 

    require_once('simple_html_dom.php') 

    $post_dom = str_get_html($html); 

    $img_tags = $post_dom->find('img'); 

    $images = array(); 

    foreach($img_tags as $image) { 
     $images[] = $image->src; 
    } 

    return $images; 
    } 

希望:) :)

+0

は魔法のように動作します:)とてもありがとうございます) – John

1

regexが有効なhtmlを解析できない場合が多いため、本当に正規表現ではなくhtmlパーサーを使用する必要があることを誰もが皆さんに伝えます。あなたは絶対にHTMLは、あなたが最初のものよりも多くを必要とする場合

preg_match('/src="([^"]*)"/i',$html,$matches); 
$image = $matches[1]; 

使用preg_match_allのために行く、この形式であると確信している場合それは言われています。がんばろう!

+0

1正規表現との質問に答えると、まだ提供しますDOMパーサーを使って正しく、より専門的な代替手段を選択することができます:) – jmort253

1

ネット上には、正規表現がDOM要素の解析には推奨されないことを示す多くのリソースがあります。 HTML Parsingのために使用しようとしている正確な目的のために使用できるいくつかのPHP DOMライブラリがあります。

Simple HTML DOM Libraryは、ページからDOM要素を抽出するために使用できるライブラリの一例に過ぎません。

+0

+1ありがとう) – John

0

はそのように見えますが、私は相手の答えにコメントを投稿することはできません。これはhackartistの返事の延長です。

以下は、イメージリンクの最初のソースを見つけるのに使用される正規表現です。 src="([^"]*)"はiframeのsrcと一致する可能性があるためです。

<img(?:[^>]+)src="([^"]*)" 
関連する問題