正则表达式从img标签中提取src属性

时间:2009-01-16 11:17:41

标签: regex

我正在尝试编写一个模式,用于提取HTML中img标记中找到的文件的路径。

String string = "<img src=\"file:/C:/Documents and Settings/elundqvist/My Documents/My Pictures/import dialog step 1.JPG\" border=\"0\" />";

我的模式:

src\\s*=\\s*\"(.+)\"

问题是我的模式还会包含img标签的'border =“0”部分。

在不包含'border =“0”?

的情况下,该文件的URI路径匹配什么模式

7 个答案:

答案 0 :(得分:31)

你的模式应该是(非转义):

src\s*=\s*"(.+?)"

重要的部分是添加的问号,尽可能少地与组匹配

答案 1 :(得分:8)

试试这个表达式:

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

答案 2 :(得分:8)

只有当它在标记内部而不是在其他地方以纯文本形式写入时,才能获取src。它还会检查您是否在src属性之前或之后添加了其他属性。

此外,它还确定您使用的是单引号(')还是双引号(“)。

\<img.+src\=(?:\"|\')(.+?)(?:\"|\')(?:.+?)\>

因此对于PHP,你会这样做:

preg_match("/\<img.+src\=(?:\"|\')(.+?)(?:\"|\')(?:.+?)\>/", $string, $matches);
echo "$matches[1]";
对于JavaScript,你会这样做:

var match = text.match(/\<img.+src\=(?:\"|\')(.+?)(?:\"|\')(?:.+?)\>/)
alert(match[1]);

希望这有帮助。

答案 3 :(得分:1)

  

我正在尝试编写一个模式,用于提取HTML中img标记中找到的文件的路径。

我们是否可以拥有“不使用正则表达式来解析[X] HTML”的自动回复?

  

问题是我的模式还会包含img标签的'border =“0”部分。

更不用说'src =“'出现在纯文本中了!

如果您事先知道要解析的HTML的确切格式(例如,因为您自己生成了它),您可以侥幸逃脱。但除此之外,正则表达式完全是错误的工具。

答案 4 :(得分:0)

你想玩贪婪的群体捕捉形式。像

这样的东西

src\\s*=\\s*\"(.+)?\"

默认情况下,正则表达式会尝试匹配尽可能多的

答案 5 :(得分:0)

我想扩展此主题,因为src属性通常不加引号,因此正则表达式采用引用和不带引号的src属性为:
src\s*=\s*"?(.+?)["|\s]

答案 6 :(得分:0)

我通过使用此正则表达式解决了它。

/<img.*?src="(.*?)"/g

https://regex101.com/r/aVBUOo/1中验证