php - 使用正则表达式从两个字符串之间提取

时间:2011-01-20 21:57:13

标签: php regex

假设我们有一个字符串:<img src="/a.jpg"> - 如何提取/a.jpg

那个肯定是错误的:#<img src="(.*)[^"]">#

6 个答案:

答案 0 :(得分:1)

这应该有效

/<img\s+src="(.*?)"/

答案 1 :(得分:0)

这有效(尝试在这里测试http://www.spaweditor.com/scripts/regex/index.php

/ “* [^”] /

答案 2 :(得分:0)

/<img src="([^"]*)">/有效。

答案 3 :(得分:0)

你可以用 ^“

来思考正确的方向
<img +src="([^"]+)">

答案 4 :(得分:0)

#<img src="(.*)[^"]">#   // original

这几乎是在正确的轨道上。然而,它结合了两种不同的方法。

(.*)太贪心了。您需要添加?才能提前停止。 (.*?)否则它会提醒报价。

然后[^"]是多余的。但是,您可以将其用作非特定.*的替代方法。只需将其嵌入支架中即可。它的优点是永远不会意外地匹配封闭的引号。您可以使用相同的空格来使整个正则表达式更具弹性,并省略结束>,以便在存在额外属性时也可以使用:

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

这是少数可以使用正则表达式的情况之一。如果你想匹配更复杂的HTML,那么更喜欢proper parser(phpQuery或QueryPath极大地简化了它。)

答案 5 :(得分:0)

其他答案只有在src是img标签所具有的唯一属性且始终是第一个时才有效。

if (preg_match('/<img\s+(?:\w+="[^"]+"\s*)*?src="([^"]+)/', $input, $matches))
  $src = $matches[1];