2011-03-05 31 views
5

我對正則表達式毫無用處,並且還沒有能夠谷歌自己一個明確的解決方案,這一個。正則表達式來搜索+替換href =「URL」

我想搜索+替換一些文本($內容)的錨點的href內的任何url與一個新的URL(存儲爲變量$ newurl)。

更改此:

<a href="http://blogurl.com/files/foobar.jpg"><img alt="foobar" src="http://blogurl.com/files/2011/03/foobar_thumb.jpg" /></a> 

要這樣:

<a href="http://newurl.com/here/"><img alt="foobar" src="http://blogurl.com/files/2011/03/foobar_thumb.jpg" /></a> 

我想使用的preg_replace將是最適合這個。喜歡的東西:

preg_replace('Look for href="any-url"', 
'href="$newurl"',$content); 

的想法是讓一個WordPress頭版上的所有圖像鏈接到自己的崗位,而不是到全尺寸的圖像(這是他們如何默認)。通常只會有一個網址可以替換,但我認爲這不會替換所有可能的匹配。

希望一切有意義,並提前感謝!

回答

4

這應該做你可以測試它花樣 - here

(?<=href=("|'))[^"']+(?=("|')) 

它使用lookahead and lookbehind斷言什麼它匹配與HREF =」HREF =啓動」,並確保它結束單引號或雙引號

注意:正則表達式將無法確定這是否是一個有效的html文檔 - 如果混合使用單引號和雙引號括起href值,它將忽略此錯誤!

+0

加分點:我將如何修改這個只返回了第一場比賽? – boopboopbeep 2011-03-16 17:15:26

6

這是我想出的主旨。希望這可以幫助別人:

$content = get_the_content(); 
$pattern = "/(?<=href=(\"|'))[^\"']+(?=(\"|'))/"; 
$newurl = get_permalink(); 
$content = preg_replace($pattern,$newurl,$content); 

echo $content; 

MUCHO的Thanko到@WiseGuyEh

+1

漂亮的腳本。但我怎樣才能用不同的值替換一個大HTML頁面中的鏈接呢? – Raptor 2011-07-18 06:24:32