Regexpi kullanarak HTML metin dosya ayıkla

3 Cevap php

Ben bu HTML kodunu (sadece bir örnek) vardır:

Sem vestibulum blandit nostra, nullam imperdiet, pellentesque vel wisi sit fusce purus mi, porttitor lorem. Bibendum non phasellus ut ipsum massa sed, interdum per, facilisis facilis luctus fermentum et donec, tristique tristique non.</p>
<p align="justify"><a class="nemo" href="http://myserver.com/images/blogs/65/emo_by_bebz.jpg"><img style="max-width:256px; max-height:256px" src="http://myserver.com/images/blogs/65/emo_by_bebz_thumb.jpg" alt="" /></a></p>
<p align="justify">Ante sed pede adipiscing morbi, ut aliquam orci, nunc tempus lectus suspendisse, sem at sit ullamcorper augue.

ve ben tüm <a class="nemo" ... </a> genişliğini değiştirmek istiyorsanız bu: {image src=emo_by_bebz_thumb.jpg} javascript ve bir normal ifadeyi kullanıyor. Bir başlangıç ​​noktası olarak, ben bu regex var:

<a class=\"nemo\"[^>]*>(.*?)src="(.*?)"[^>]*></a>

çalışır, ancak 2 $ bana sadece tam görüntü yolunu verir ve ben sadece dosya adını istiyorum. Herhangi bir fikir?

şimdiden teşekkürler,

3 Cevap

Bu regex kullanmak durumunda bunu 3 dolara almalısınız:

<a class=\"nemo\"[^>]*>(.*?)src="(.*)\/(.*?)"[^>]*></a>

Bu gerçek bir ayrıştırıcı kullanarak karşı konuşuyor şey var mı? Regex Böyle bir iş için kaçınılmalıdır.

Extracting data from HTML, Kore Nordmann tarafından yazılmış: İşte bunun için libxml ve DOMDocument kullanmak için nasıl güzel bir yazma-up.

Aşağıdaki kod onun (sizin için çalışmasını sağlamak için eksik çok şey değil) 'dir:

<?php 
$oldSetting = libxml_use_internal_errors( true ); 
libxml_clear_errors(); 

$html = new DOMDocument(); 
$html->loadHtmlFile( 'http://kore-nordmann.de/blog.html' ); 
$xpath = new DOMXPath( $html ); 

$links = $xpath->query( '//a' ); 
foreach ( $links as $link ) 
{ 
  echo $link->getAttribute( 'href' ), "\n"; 
} 

libxml_clear_errors(); 
libxml_use_internal_errors( $oldSetting ); 
?>

Çözüm çok basit: regex için aşağıdaki komutu, (kelime / pseudo kodu) ekleyin,

Replace `<a class=\"nemo\"[^>]*>(.*?)src="(.*?)"[^>]*></a>`
Ignore the first 5 / and their content