2013-03-08 88 views
1

我與內容分離的圖像,像這樣:正則表達式FILENAME.EXT僅

list($img, $string) = explode('>', $string, 2); 
$isSlashes = (stripos($img, '\\')!==false); 
if ($isSlashes) { 
    $img = stripslashes($img); 
} 
preg_match('|src=["\']([^"\']+)["\']|i', $img, $match); 
if (empty($match[1])) { 
    imgres_log('Image src not found in '.$img, 'error'); 
    imgres_joinContent($content, $img, $string, $isSlashes); 
    continue; 
} 
$src = $match[1]; 

...它通常工作時提供一個查詢字符串的圖像,除了如:img0880.jpg?itok=pUzE5f9d這打亂了一切。如何在?標記後刪除零件?

回答

2

那麼,要做你說的,只是添加?進入你的正則表達式。

preg_match('|src=["\']([^"\'?]+)["\']|i', $img, $match); 

但是,或者實際上兩個buts。 1)如果圖像在?之後有一個查詢字符串,它是圖像URL的一部分。像image.jpg?foo = bar可能指的是與image.jpg不同的圖像?foo = baz。 2)你在這裏允許單引號和雙引號。但是如果有src =「joe's_image.jpg」或src = image.jpg?這兩種情況都是HTML有效的,並且會在您的腳本中失敗。

解決方案:我建議使用DOM解析器而不是正則表達式。

+0

真棒,對於現在的作品! ;) – 3zzy 2013-03-08 12:21:56

1

試試這個

preg_match("~src=(\"|'|)(.*?)[\"|'| ]~si", $img, $match); 

工作

像所有條件

1)

src="image.jpg?dasd=a5fsd" 

輸出

Array 
(
    [0] => src="image.jpg?dasd=a5fsd" 
    [1] => " 
    [2] => image.jpg?dasd=a5fsd 
) 

2)

src='image.jpg?dasd=a5fsd' 

輸出

Array 
(
    [0] => src='image.jpg?dasd=a5fsd' 
    [1] => ' 
    [2] => image.jpg?dasd=a5fsd 
) 

3)

src=image.jpg?dasd=a5fsd 

輸出

Array 
(
    [0] => src=image.jpg?dasd=a5fsd 
    [1] => 
    [2] => image.jpg?dasd=a5fsd 
)