繁体   English   中英

使用regexp从HTML文本中提取文件名

[英]Extract filename from HTML text using regexp

我有以下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只给我完整的图像路径,我只想要文件名。 有任何想法吗??

提前致谢,

有什么反对使用真正的解析器吗? 对于这样的工作,应避免使用正则表达式。

这是一个很好的文章,介绍如何使用libxmlDOMDocument :Kore Nordmann编写的从HTML提取数据

下面的代码是他的代码(让它为您服务不多):

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

如果使用此正则表达式,则应在$ 3中获得它:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM