2011-01-20 77 views
0

假設我們有一個字符串:<img src="/a.jpg"> - 如何提取/a.jpgphp - 使用正則表達式從兩個字符串之間提取

那一個肯定是錯誤的:#<img src="(.*)[^"]">#

+1

的可能重複的[正則表達式用於抓住的A元素href屬性(http://stackoverflow.com/questions/3820666/regular-expression-for-grabbing-the-href-attribute-of一個元素) – Gordon 2011-01-20 22:03:54

回答

1

這應該工作

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

/<img src="([^"]*)">/工程。

0

可能是你認爲正確的方向^」

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

這幾乎是在正確的軌道上。但是它結合了兩種不同的方法

(.*)過。貪婪,您需要添加一個?以提前停止。(.*?)否則它會淹沒報價。

[^"]則是多餘的。但是,您可以將其用作非特定.*的替代品。只需將其嵌入到大括號中即可。它具有從不偶然地匹配封閉引號的優點。你可以做同樣的替代空間,使整個正則更有彈性,並離開了收盤>所以它也當額外的屬性都存在工作:

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

這是爲數不多的案例之一,其中普通表達式可以接受使用。如果你想匹配更復雜的HTML,然後喜歡proper parser(phpQuery或QueryPath中大大簡化它。)

0

其他答案只會如果src的只有屬性的img標籤將有工作,它永遠是第一位。

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