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

wil*_*ood 12 regex

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

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

我的模式:

src\\s*=\\s*\"(.+)\"
Run Code Online (Sandbox Code Playgroud)

问题是我的模式还将包含img标签的'border ="0"部分.

什么模式匹配此文件的URI路径而不包括'border ="0"?

Seb*_*etz 34

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

src\s*=\s*"(.+?)"
Run Code Online (Sandbox Code Playgroud)

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


Gum*_*mbo 8

试试这个表达式:

src\s*=\s*"([^"]+)"
Run Code Online (Sandbox Code Playgroud)


小智 8

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

此外,它确定您是使用单引号(')还是双引号(").

\<img.+src\=(?:\"|\')(.+?)(?:\"|\')(?:.+?)\>
Run Code Online (Sandbox Code Playgroud)

所以对于PHP你会这样做:

preg_match("/\<img.+src\=(?:\"|\')(.+?)(?:\"|\')(?:.+?)\>/", $string, $matches);
echo "$matches[1]";
Run Code Online (Sandbox Code Playgroud)

对于JavaScript,你会做:

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

希望这会有所帮助.

  • 如果“src”标签的结尾是最后一个并且粘在 img 标签的结尾处,则此正则表达式将不起作用。例如: `&lt;img alt="" title="" src="/path/to/image.jpg"&gt;` &lt;=== 将不起作用 (2认同)

Nav*_*thy 7

我通过使用这个正则表达式解决了这个问题。

/<img.*?src="(.*?)"/g
Run Code Online (Sandbox Code Playgroud)

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