PHP Image Src 正則表達式(RegExp)是一個對圖片元素進行提取的有用工具。無論是在圖像處理還是在網(wǎng)絡(luò)編程方面,我們都會遇到讓我們從 HTML 文檔中獲取 img 標(biāo)記 URL 的情況。這時候,我們就需要用到 PHP Image Src 正則表達式。
首先,我們來看最基本的 PHP RegExp 代碼,使用 preg_match() 函數(shù)匹配 HTML 文本中的 img src 屬性。
$str = '';
$pattern = '/(]*src\s*=\s*"[^"]*"[^>]*>)/i';
preg_match($pattern, $str, $matches);
print_r($matches);
這段代碼返回匹配的字符串及其在原文本中的位置。 如果該字符串未找到,則返回 false。 如你所見, $matches[1] 就是我們需要的 src 屬性。 如果您想直接獲取圖片 URL,請改用:$pattern = '/]+src=["\\\']([^\\\'"]+)["\\\']/i';
preg_match($pattern, $str, $matches);
print $matches[1];
現(xiàn)在讓我們深入了解一下這個表達式所要完成的工作。
第一步:搜索 HTML 元素
我們首先需要看到 img 元素。在上面的范例中,這是用標(biāo)簽實現(xiàn)的。但是,實際上,這可能由很多不同的 HTML 元素完成。 我們需要能夠檢測到以下元素:
***(僅適用于內(nèi)聯(lián)樣式)
* … 等等
下面是一個適用于所有這些元素的正則表達式:
$pattern = '/(]+type="image"|url\s*\(\s*"?(.*?)"?\s*\)\s*["\']?)/i';
上面的正則表達式使用 OR 運算符 "|" 來識別不同的 HTML 元素。同時,我們聲明了一個名為 $pattern 的變量,該變量包含某些元素的 SRC 屬性的格式。
第二步:獲取 SRC 屬性
現(xiàn)在,我們需要獲取從 img 元素返回的 src(或從其他任何元素)。 這很容易實現(xiàn),但需要一些正則表達式編程技巧。具體來說,您必須記住,src 屬性可以放在任何順序中,既可以使用雙引號,也可以使用單引號。 為此,我們需要編寫一些更完整的正則表達式,以便在更廣泛的條件下匹配。
下面是一個更好的正則表達式,可用于在任何情況下提取 src 屬性的值:$pattern = '/src\s*=\s*["\'](.+?)["\']/i';
preg_match_all($pattern, $string, $matches);
print_r($matches);
此時, $matches 變量中存儲了一個由所有 src 屬性組成的數(shù)組。 請注意,正則表達式中的 “?” 用于捕獲非貪婪匹配,以便更快地匹配。
第三步:使用 preg_replace() 替換不必要的內(nèi)容
現(xiàn)在,我們可以使用 preg_replace() 函數(shù)將我們剛剛獲得的圖像 URL 插入到我們想要的位置。這可以用于圖片縮放、裁剪和許多其他任務(wù)。下面是一個簡單的示例:$img_regex = '/(]*src\s*=\s*["\\\'])([^"\']*)([^>]*>)/i';
$string = preg_replace_callback($img_regex, function($matches) {
$image_url = $matches[2];
$options = array(
'width' =>'300',
'height' =>'200'
);
$timestamp = time();
$new_image_src = 'https://example.com/generate-image.php?url='.$image_url.'&width='.$options['width'].'&height='.$options['height'].'×tamp='.$timestamp;
return $matches[1] . $new_image_src . $matches[3];
}, $string);
上面的代碼將匹配到的所有 img 元素的源 URL 替換為新的 URL,該 URL 可能是縮放、裁剪或其他圖像操縱器的結(jié)果。 請注意,這里使用 preg_replace_callback() 函數(shù),這是因為我們想使用匿名函數(shù)來替換我們的 img 元素。