标签的正则表达式失败-6ren"> 标签的正则表达式失败-我使用正则表达式提取 标签 这是我的正则表达式 my @accept = $message_body =~ //gi; 现在,当 img 标签如下时,我的正则表达式会失败: 谁能告诉我为什么? 最佳答-6ren">
gpt4 book ai didi

当 "src"值不同时,捕获 标签的正则表达式失败

转载 作者:行者123 更新时间:2023-12-02 07:34:54 25 4
gpt4 key购买 nike

我使用正则表达式提取 <img src="img.jpg">标签

这是我的正则表达式

my @accept = $message_body =~ /<img src=\"\S*\">/gi;

现在,当 img 标签如下时,我的正则表达式会失败:<img src="cid:img.jpg">

谁能告诉我为什么?

最佳答案

描述

\"\S*\" 的贪婪说它会在最后一个 " 之前匹配尽可能多的非空格字符出现在字符串中。您可以将其更改为 \".*?\"它将匹配下一个 " 之前的任何字符.

我会彻底修改你的表达式,这样它就可以避免一些其他困难的 HTML 边缘情况。

这个表达式将:

  • 匹配具有 src 属性的 img 标签
  • 获取src属性值
  • 避免困惑的 html 边界情况,例如:
    • 喜欢>或者看起来像嵌入式 javascript 函数中的属性的东西
    • src 结尾的属性喜欢hrefsrc="somevalue"
  • 尽管因为您只查找单个属性而不用于此问题,(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\ssrc=['"]([^"]*)['"])构造允许多个属性以任意顺序出现在 img 标签内。

<img\b(?=\s)(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\ssrc=['"]([^"]*)['"])(?:[^>=]|='[^']*'|="[^"]*"|=[^'"\s]*)*\s?>

enter image description here

例子

实例:http://www.rubular.com/r/bRmdy0YA0S

示例文本

请注意第二个图像标签如何处理一些非常困难的边缘情况。

<img src="cid:img.jpg">
<img hrefsrc="NotMe.jpg" onmouseover=' src="NotTheMeEither.jpg" ; if ( 6 > x ) { funRotator(src) ; } ; ' src="cid:DifficultToFind.jpg">

匹配

[0][0] = <img src="cid:img.jpg">
[0][1] = cid:img.jpg

[1][0] = <img hrefsrc="NotMe.jpg" onmouseover=' src="NotTheMeEither.jpg" ; if ( 6 > x ) { funRotator(src) ; } ; ' src="cid:DifficultToFind.jpg">
[1][1] = cid:DifficultToFind.jpg

关于当 "src"值不同时,捕获 <img> 标签的正则表达式失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17712596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com