我有以下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>$
但是找不到我想要的东西。
请帮帮我。
答案 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);