使用正则表达式从HTML文本中提取文件名

时间:2009-10-15 16:38:47

标签: php javascript html regex

我有这个HTML代码(只是一个例子):

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.

我希望使用javascript和常规表达替换所有<a class="nemo" ... </a>宽度: {image src = emo_by_bebz_thumb.jpg} 。作为一个起点我有这个正则表达式:

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

它可以工作,但$ 2只给我完整的图像路径,我只想要文件名。任何想法??

提前感谢,

3 个答案:

答案 0 :(得分:3)

对于使用真正的解析器,是否有任何反对意见?对于这样的工作,应该避免使用正则表达式。

以下是关于如何使用libxmlDOMDocument的好文章:Extracting data from HTML,由Kore Nordmann撰写。

以下代码是他的(没有太多遗漏让它适合你):

<?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 ); 
?>

答案 1 :(得分:2)

如果你使用这个正则表达式,你应该得到3美元:

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

答案 2 :(得分:0)

解决方案非常简单:在正则表达式中添加以下指令,(在单词/伪代码中),

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