preg_match_all görüntü kaynağı

3 Cevap php

Ben HTML herhangi bir img etiketinin kaynağını ayıklamak için aşağıdaki regex ifade var.

/(<img).*(src\s*=\s*"([a-zA-Z0-9\.;:\/\?&=\-_|\r|\n]{1,})")/isxmU

Bununla birlikte, şu uyumlu olmak görünmez:

<IMG SRC='http://www.mysite.com/pix/lens/mtf/CAEF8512L.gif'>

Ben de bu maç nasıl inşa edebilirsiniz?

3 Cevap

I http://simplehtmldom.sourceforge.net/ kullanarak sona erdi. Hızlı ve kolay oldu.

Sadece çift tırnaklar için eşleşen ediyoruz. Denemek

/(<img).*(src\s*=\s*("|')([a-zA-Z0-9\.;:\/\?&=\-_|\r|\n]{1,})\3)/isxmU

İlk " ("|') ile ikame edilmiş ve bu unutmayın bitiş onay bu grup için bir geriye kullanarak, \3.

Bunun yerine, bunu yapmak için bir HTML çözümleyici kullanarak düşündünüz mü?

Gerçekten şeyler bu tür için regex kullanmak gerekir: HTML düzenli ifadeler için oldukça değil regular enough olduğunu ...

Ne varsa, örneğin, onlardan biri:

<img src="..." />
<img src='...' />
<img src="...">
<img src="..." alt="..." />
<img alt="..." src="..." />
<img alt="..." src="..." style="..." />


Instead, you should use an HTML parser, like, for instance, DOMDocument::loadHTML.

HTML belge DOMDocument olarak yüklendikten sonra aldığımızda, size XPath sorguları kullanabilirsiniz, ya da ihtiyaç belirli bilgileri ayıklamak için, DOM geçmesi.


For instance, considering you have this portion of HTML in a variable :

$html = <<<HTML
<p>test</p>
<img src="http://www.example.com/image-1.png" />
plop glop
<img alt="booh" src="http://www.example.com/image-2.png" />
huhu ?
<img alt="booh again" src='http://www.example.com/image-3.jpg' />
HTML;

Şunları yapabilirsiniz:

  • Instanciate DOMDocument
  • değişkeni HTML yüklemeyi
  • Tüm img etiketleri almak için getElementsByTagName yöntemini kullanın
  • ve getAttribute yöntemi ile, her biri src öznitelik elde

Hangi bu gibi bazı kod anlamına gelir:

$dom = new DOMDocument();
$dom->loadHTML($html);
$nodes = $dom->getElementsByTagName('img');
foreach ($nodes as $img) {
  var_dump($img->getAttribute('src'));
}

Ve sen almak çıkışına bu gibi görünecektir:

string 'http://www.example.com/image-1.png' (length=34)
string 'http://www.example.com/image-2.png' (length=34)
string 'http://www.example.com/image-3.jpg' (length=34)


Not really hard to write -- and it should work much better than regexes, when it comes to extracting data from an HTML document !