2009-04-09 86 views
0

我有一個API調用,基本上返回託管的wiki應用程序頁面的HTML。然後我做一些substr,str_replace和preg_replace kung-fu格式化它按照我的網站風格指南。替換本地鏈接,保留外部鏈接

我做了一組調用來格式化我的左側導航欄(將pageX的鏈接更改爲我的wikiParse?page = pageX類型的東西)。我可以安全地在左側導航欄上執行此操作。然而,在正文中,我不能安全地假定鏈接是指向內部頁面的鏈接。它很可能是一個外部資源的鏈接。所以我需要做一個匹配href =的preg_replace,而不是跟着http://。

這裏是我的刺吧:

$result = preg_replace('href\=\"(?!http\:\/\/)','href="bla?id=',$result); 

這似乎剝離出網頁上的全部內容。任何人都可以看到我滑落的位置?我不認爲我太遙遠了,只是看不到下一步該去哪裏。

乾杯

回答

1

preg_* functions期待Perl-Compatible Regular Expressions (PCRE)。與普通正則表達式的結構區別在於,表達式本身被包裹到分隔符中,該分隔符將表達式與可能的modifiers分開。經典分隔符是/,但PHP允許除反斜線字符以外的其他任何非字母數字字符。另見Intruduction to PCRE in PHP

那麼試試這個:

$result = preg_replace('/href="(?!http:\/\/)/', 'href="bla?id=', $result); 

這裏href="(?!http://)是正則表達式。但是,因爲我們使用/作爲分隔符,所以正則表達式中出現的/必須使用反斜槓進行轉義。

+0

好眼睛!我知道這件事很明顯......謝謝。 – 2009-04-09 13:14:08

1

您的正則表達式缺少開始和結束分隔符(默認爲'/');

$result = preg_replace('/href\=\"(?!http\:\/\/)/','href="bla?id=',$result);