如何使用正则表达式获取图像src

时间:2010-09-27 20:02:56

标签: html regex

我有以下HTML标记,

<div id="subcontent_l">
    <p>
        <a href="/membership-packages/"><img height="202" width="644" alt="" src="http://74.52.72.231/wp-content/uploads/2010/06/banner1.jpg" title="banner1" class="aligncenter size-full wp-image-299">
        </a>
    </p>
    <p class="subc">Access to Guaranteed Healthcare Benefits</p>
    <p><a href="http://74.52.72.231/join-now"><img height="37" width="166" alt="" src="http://74.52.72.231/wp-content/uploads/2010/09/jn2.jpg" title="jn" class="alignleft size-full wp-image-229"></a></p>
</div>

现在在上面的标记上我想找到具有src = jn2.jpg的后续图像的锚点 找到这个之后我的Markup应该是这样的

期望的结果将是: -

<a href="http://74.52.72.231/join-now"><img height="37" width="166" alt="" src="http://74.52.72.231/wp-content/uploads/2010/09/jn2.jpg" title="jn" class="alignleft size-full wp-image-229"></a>

我想使用正则表达式执行此操作,我有一个正则表达式,可以在里面找到所有的图像标记。 我的表达是/[^<]*<a.*href[\s]*=[\s]*("[^"]*").*[\s]*<img.*\/a>$ 但是找不到我想要的东西。 请帮帮我。

2 个答案:

答案 0 :(得分:7)

正则表达式不适合这项工作。 HTML不是常规语言。而是使用HTML解析器。每个自尊的编程语言都提供HTML解析工具和/或库。我不知道你正在使用什么编程语言,但如果你熟悉Java,我建议你Jsoup。这是一个做你想做的事的例子:

String html = "<div id=\"subcontent_l\">"
    + "<p>"
    + "<a href=\"/membership-packages/\"><img height=\"202\" width=\"644\" alt=\"\" src=\"http://74.52.72.231/wp-content/uploads/2010/06/banner1.jpg\" title=\"banner1\" class=\"aligncenter size-full wp-image-299\">"
    + "</a>"
    + "</p>"
    + "<p class=\"subc\">Access to Guaranteed Healthcare Benefits</p>"
    + "<p><a href=\"http://74.52.72.231/join-now\"><img height=\"37\" width=\"166\" alt=\"\" src=\"http://74.52.72.231/wp-content/uploads/2010/09/jn2.jpg\" title=\"jn\" class=\"alignleft size-full wp-image-229\"></a></p>"
    + "</div>";

Document document = Jsoup.parse(html);
Element link = document.select("img[src$=jn2.jpg]").first().parent();
System.out.println(link.outerHtml()); // Prints the desired result.

Jsoup使用jQuery - 与CSS selectors类似,以选择感兴趣的元素。对于C#/ .NET,有一个Jsoup端口:NSoup。 PHP也有类似的库:phpQuery

另见:

答案 1 :(得分:-1)

科林赫伯特说的是真的,但仍有正则表达式

preg_match_all('%<a[^>]*href=(\'|")(.+?)\1[^>]*?>.*?<img[^>]*src=(\'|")(.+?)\1[^>]*?>.*?</a>%si', $code, $result, PREG_SET_ORDER);