【问题标题】:Regex to match any url in img tag正则表达式匹配 img 标签中的任何 url
【发布时间】:2012-01-15 00:55:54
【问题描述】:

我需要一个可以匹配img src标签中任意url的正则表达式

网址可以是“/images/temp.jpg”或“temp1.jpg”,甚至是“http://www.example.com/temp.jpg?i=123”或其他任何内容

我写了以下代码:

preg_match_all('/(href|src)\s*=\s*"([^\s]+\/\/[^\/]+.\/[^\s]+\.(jpg|jpeg|png|gif|bmp))/ixu'

但它不匹配许多网址,包括带有查询字符串的网址,例如 ?i=12345

有人知道如何实现吗?

谢谢

【问题讨论】:

标签: php regex


【解决方案1】:

你可以使用

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

并采取第一个捕获组。

编辑: 顺便说一句,这假设您不会在未正确关闭标签的情况下启动标签。也许更好的是

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

编辑 2:目前尚不清楚您要实现什么目标,我觉得我在浪费时间试图帮助您。在您的编辑中,您写道您尝试过:

preg_match_all('/(href|src)\s*=\s*"([^\s]+\/\/[^\/]+.\/[^\s]+\.(jpg|jpeg|png|gif|bmp))/ixu'

为什么没有提到img?当img标签不带href属性时,为什么要包含href?似乎您更感兴趣的是检查某些内容是否是有效的图像 URL,而不是匹配在 img 标记内指定的某个 URL。请注意,我提供的正则表达式不会检查 URL 的有效性;它只是基于这样一个事实,即 src 属性中引号中出现的任何内容都应该是一个有效的 URL。我这样做是因为在许多情况下这是一个实际的假设,而且您并没有具体说明您真正想要什么。如果您不能提出更好的问题,我不会进一步更新。

【讨论】:

  • 请解释一下什么是第一个捕获组
  • @I-M-JM 对不起,我打错了,正确的术语是捕获组。这是基本的正则表达式,你可以从谷歌搜索中找到你需要知道的一切。您使用括号 () 指定捕获组。
【解决方案2】:

多年来,先搜索、询问和回答数百次:

regular expression: Find url from anchor tag

只需将&lt;a 替换为&lt;img 并将href 替换为src

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多