2017-06-04 15 views
1

は、我々はこのような文字列を持っていると仮定しましょう:PHP - どのように多くのimgのsrcからすべてのURLを取得するには?

Its really great to <img src="image2.png" /> hear from you "Today is good <img src="http://www.google.com/picture2.png" /> day" Let's listen song together! ---------<img src="images/profile.png" />\\\\\\ 

これは全体の文字列です。我々は内部に3つのimgを持っています。

私たちは、私が意味する、私たちはこの文字列を持っている、そしてどのようにタグをのimgからすべての「SRC」を抽出し、1つの新しい配列変数にそれを収集するために彼を処理するために

output[0] = 'image2.png'; 
output[1] = 'http://www.google.com/picture2.png'; 
output[2] = 'images/profile.png'; 

のように、この文字列から変数を作成したいです。

どうすればよいですか?私たちはそれをどのように達成できますか?

さらに、私はCodeIgniterフレームワークを使用します。たぶんこのフレームワークの方法でしかできないかもしれませんが、私はそれが可能であるとは思わないのです。

答えて

1

使用preg_match_all()

$src = <<<EOL 
Its really great to <img src="image2.png" /> hear from you "Today is good 
<img src="http://www.google.com/picture2.png" /> day" Let's listen song 
together! ---------<img src="images/profile.png" />\\\\\\ 
EOL; 

preg_match_all('~src="([^"]+)~', $src, $matches); 

var_export($matches[1]); 
// output -> 
//  array (
//   0 => 'image2.png', 
//   1 => 'http://www.google.com/picture2.png', 
//   2 => 'images/profile.png', 
//  ) 

ライブdemo


更新:あなたが正規表現パターンに\Kを使用することができますjを得る$matchesに必要なものUST:

preg_match_all('~src="\K[^"]+~', $src, $matches); 
var_export($matches); 
// output -> 
//  array (
//  0 => 
//  array (
//   0 => 'image2.png', 
//   1 => 'http://www.google.com/picture2.png', 
//   2 => 'images/profile.png', 
//  ), 
//  ) 

参考のためには、それはいいのですが、完全には正しく動作しませんEscape sequences

+0

なぜ 'var_export($ matches [1]);'?なぜ1?なぜこれは1ではなく2行を生成するのですか? –

+0

'$ matches [0]'は完全なパターン 'src ="([^ "] +)'にマッチした文字列の配列を含んでいます。そして '$ matches [1]'は最初のサブマスクの配列の配列を含んでいます: '([^"] +) ' –

1

ページ全体のソースにpreg_match_all (string $pattern , string $subject [, array &$matchesを使用して、src =値を選択します。このように:

$page_sourceがあなたの入力と $srcある
$src = array(); // array for src's 
preg_match_all ('/src="([^"]+)"/', $page_source, $src); 
$just_urls = $src [1]; 

src=値の結果の配列である、と$just_urlsは引用符のすぐ内側の配列です。

パターン/src="([^"]+)"/は、引用符の中にあるものだけを返します。

参照: https://secure.php.net/manual/en/function.preg-match-all.php

+1

を参照してください。これをテストし、ここで結果を見てください: 'https:// i.stack.imgur.com/oQFrL.png'。良い結果と悪い結果が得られます.1つではなく2つの行があります。 –

+0

ああ、ちょうど一致するためには、2番目の配列を使用する必要があります。コードを編集します。 –

0

あなたはPHP DOM Extensionを使用する必要があります。 DOM拡張機能を使用すると、PHPを使用してDOM APIを使用してXML文書を操作できます。

また、あなたのコードの下に通過することができます

function fetchImages($content) { 
    $doc = new DOMDocument(); 
    $doc->loadHTML($content); 
    $imgElements = $doc->getElementsByTagName('img'); 

    $images = array(); 

    for($i = 0; $i < $imgElements->length; $i++) { 
     $images[] = $imgElements->item($i)->getAttribute('src'); 
    } 

    return $images; 
} 
$content = file_get_contents('http://www.example.com/'); 
$images = fetchImages($content); 

print_r($images); 
+0

いいですね。しかし、私はPHPの仲間を行う必要があります:D –

+0

私は正確な要件を知っているかもしれませんか?だから私はさらに説明することができます:) –

+0

以下の答えは、私が欲しかったのとまったく同じ結果をもたらします。すべてクリアで短くPHPで。ここで: 'https:// i.stack.imgur.com/oQFrL.png'しかし、何かが間違っている –

関連する問題