如何使用正则表达式来获取“img”标签?

Posted

技术标签:

【中文标题】如何使用正则表达式来获取“img”标签?【英文标题】:How can I use regular expression to grab an 'img' tag? 【发布时间】:2013-09-10 23:31:33 【问题描述】:

我想从这样的 JSON 数据返回的文本中获取一个 img 标记。我想从一个字符串中获取这个:

<img class="img" src="https://fbcdn-photos-c-a.akamaihd.net/hphotos-ak-frc3/1239478_598075296936250_1910331324_s.jpg"  />

我必须使用什么正则表达式来匹配它?

我使用了以下,但它不起作用。

"<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>"

【问题讨论】:

***.com/a/1732454/775544 请不要使用正则表达式解析 html。 HTML 不是常规语言。 不要使用正则表达式解析 HTML。使用适当的 HTML 解析模块。 您无法使用正则表达式可靠地解析 HTML,并且您将面临悲伤和挫败感。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。请参阅htmlparsing.com/php 或this SO thread,了解如何使用已经编写、测试和调试过的 PHP 模块正确解析 HTML。 如果我想获取所有属性(title、src、alt),正则表达式模式需要进行哪些修改 ]*src="([^" ]*)"[^>]*>。提前致谢。 【参考方案1】:

你可以简单地使用这个表达式来匹配一个 img 标签,就像例子中一样:

<img([\w\W]+?)/>

【讨论】:

OP 没有说他想捕获什么,但它捕获了 class、src 和 alt 标签。 @hwnd 是的,我知道。但正如你所说,他没有具体说明他要捕获什么。 Html 不能真正用正则表达式有效地解析,但在表达式中添加一些粒度会更好。 regexr.com 抱怨需要关闭右斜线并且右斜线本身是可选的,具体取决于它是 HTML 还是 XHTML。更好的方法是:&lt;img([\w\W]+?)[\/]?&gt;,你怎么看?【参考方案2】:

您的正则表达式与字符串不匹配,因为它缺少结束 /

编辑 - 不,/ 不是必需的,因此您的正则表达式应该可以工作。但是你可以像下面这样放松一点。

稍作修改:

 <img\s[^>]*?src\s*=\s*['\"]([^'\"]*?)['\"][^>]*?>

【讨论】:

【参考方案3】:

请注意,由于各种原因,您不应使用正则表达式来解析 HTML

<img\s+[^>]*src="([^"]*)"[^>]*>

或者使用Jsoup...

String html = "<img class=\"img\" src=\"https://fbcdn-photos-c-a.akamaihd.net/
               hphotos-ak-frc3/1239478_598075296936250_1910331324_s.jpg\" alt=\"\" />";

Document doc = Jsoup.parse(html);
Element img = doc.select("img").first();
String src = img.attr("src");

System.out.println(src);

【讨论】:

jsoup 比它好吗?? 是的,只需使用String imgall = img.outerHtml(); System.out.println(imgall); Jsoup 的 parse 方法的性能还有很多不足之处。 如果我想获取所有属性(title、src、alt),上述正则表达式模式需要进行哪些修改。提前致谢。【参考方案4】:

我面临同样的情况,我尝试了这个,它对我有用。

(&lt;img)[^/&gt;]*(/&gt;|&gt;)

解释如下:

此解释来自网站https://extendsclass.com/regex-tester.html

【讨论】:

以上是关于如何使用正则表达式来获取“img”标签?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配img标签中的src获取地址

PHP正则表达式提取IMG标签的问题

js使用正则表达式将字符串里面的img标签src的值提取出来

正则表达式中的双引号

java正则表达式匹配img标签并替换

正则表达式和 PHP - 从 img 标签中隔离 src 属性