Düzenli ifadeler görevleri büyük bir çeşitlilik için iyi olabilir, ben HTML DOM ayrıştırma zaman genellikle kısa düşüyor bulabilirsiniz. HTML ile sorun belgenizin yapısı doğru (ve doğru ile ben hiç yanlış pozitif ile% 100 başarı oranı ortalama) bir etiket ayıklamak için zor olduğu kadar değişken olmasıdır.
Ne yapmanız tavsiye gibi SimpleHTML
gibi bir DOM ayrıştırıcı kullanmak ve bu şekilde kullanmaktır:
function get_first_image($html){
require_once('SimpleHTML.class.php')
$post_html = str_get_html($html);
$first_img = $post_html->find('img', 0);
if($first_img !== null) {
return $first_img->src';
}
return null;
}
Bazıları bu overkill olduğunu düşünüyorum, ama sonunda, onu korumak için daha kolay olacak ve aynı zamanda daha fazla genişletilebilirlik için izin verir. Örneğin, DOM çözümleyici kullanarak, ben de alt özniteliği alabilirsiniz.
Bir düzenli ifade aynı hedefe ulaşmak için tasarlanmış olabilir ama zorlayacaktır ki bu şekilde sınırlı olacaktır alt
src
ya da tam tersi sonra olmak nitelik ve bu üstesinden gelmek için sınırlama normal ifadeye daha fazla karmaşıklık eklersiniz.
Ayrıca, aşağıdakileri dikkate alın. Düzgün düzenli ifadeler kullanarak bir <img>
etiketini eşleştirmek için ve (grup 2 yakalanan) sadece src
niteliğini almak için, şu normal ifadeyi gerekir:
<\s*?img\s+[^>]*?\s*src\s*=\s*(["'])((\\?+.)*?)\1[^>]*?>
Ve sonra yine, yukarıdaki eğer başarısız olabilir:
- Niteliği veya etiket adı sermaye ve
i
strong> değiştirici kullanılmaz.
- Tırnaklar
src
niteliği etrafında kullanılmaz.
- Bir başka özellik daha sonra
src
yerde onların değer >
karakteri kullanır.
- Ben öngörülen bazı başka nedenidir.
Yani yine, sadece bir dom belgeyi ayrıştırmak için normal ifadeler kullanmayın.
EDIT: tüm görüntüleri istiyorsanız:
function get_images($html){
require_once('SimpleHTML.class.php')
$post_dom = str_get_dom($html);
$img_tags = $post_dom->find('img');
$images = array();
foreach($img_tags as $image) {
$images[] = $image->src;
}
return $images;
}