2010-06-20 158 views
0

URL示例:PHP網址正則表達式過濾

http://p.static.com/i/logo.jpg 

我希望能夠提取從我自己的CDN是在一個字符串中引用的URL,提取src網址,並從SRC的文件和文件夾,所以/i/logo.jpg,然後用散列版本替換它,所以我可以使用像encode('/i/logo.jpg')這樣的散列函數。我想要返回所有匹配的url的數組,然後我可以在字符串內處理和str_replace

有點複雜,我希望是有道理的。

感謝

+0

@保羅迪克森是啊,我雖然寫類似的規定,但後來我很無聊,所以我寫的代碼:P – Artefacto 2010-06-20 00:48:03

+0

我試過,但我真的是無法正則表達式的功能代碼,拯救我的生命。下面的preg_replace函數非常棒。我現在正在測試代碼,並會在幾分鐘內回覆。 – James 2010-06-20 01:02:14

回答

0
function encode($val) { 
    return preg_replace(
     '/(?<=http:\\/\\/p\\.static\\.com\\/).*/ie', 
     'hash_function("\\0")', 
     $val); 
} 

$src = ...; //HTML data 

$d = new DOMDocument; 
$d->loadHTML($src); 

$images = $d->getElementsByTagName("img"); 
for ($i = 0; $i < $images->length; $i++) { 
    $curval = $images->item($i)->getAttribute("src"); 
    $images->item($i)->setAttribute("src", encode($curval)); 
} 

$newHtml = $d->saveHTML();