2013-02-04 41 views
0

這是獨家新聞。我使用正則表達式來查找圖像,並在其源代碼的開頭插入「../../」。不過它不工作,但是當我運行RegEx時,保存圖像文件名稱(包括擴展名)的變量正在改變。如果我註釋掉'preg_replace'這一行,這個變量就會正確回顯。誰能告訴我什麼是錯的?提前致謝!正則表達式意外改變變量值?

$imagefile = substr($filedata,($jpgbeginning+1),(($jpg+3)-$jpgbeginning)); 
$filedata = preg_replace('/(<img\s+.*?src=")(.*\\.(?:jpg|png|bmp|gif).*?>)/', '<img src="../'.$imagefile.'" />', $filedata); 
echo $imagefile."<br /><br />"; 

此外,在正則表達式中,它將「../」部分加倍,所以實際上由於某種原因輸出爲../../。再次感謝!

+0

你似乎已經majorly混淆'filedata' $和海誓山盟'$ imagefile',因爲你正在使用他們向前和向後所有的時間(例如,在你的例子中,'$ imagefile'沒有附加任何正則表達式,只是'substr',而'$ filedata'替代了它本身的正則表達式。 – h2ooooooo

+1

你真的不應該使用這樣的正則表達式。使用DOM來提取src屬性,爲您提供裸露的URL。這將簡化一個操作級別。 –

+0

Re:h2oo ... - $ imagefile只是爲了獲得圖像的全名,而$ filedata實際上應該是在自己做正則表達式。我正在用正則表達式更新$ filedata。 –

回答

0

以下的preg_replace應該工作:

preg_replace("/(<img\s+src\s*=\s*\")(.+?)(?=\")/","$1../../$2", HTML);