2014-06-19 47 views
0

我使用此函數將相對鏈接替換爲絕對值,並將它們作爲頁面參數以file_get_contents進行流式處理。還有一個問題,我想在我的正則表達式,忽略了人物 其功能正則表達式preg替換省略字符

$pattern = "/<a([^>]*) " . 
     "href=\"[^http|ftp|https|mailto]([^\"]*)\"/"; 
$replace = "<a\${1} href=\"?u=" . $base . "\${2}\""; 
$text = preg_replace($pattern, $replace, $text); 
$pattern = "/<a([^>]*) " . 
     "href='[^http|ftp|https|mailto]([^\']*)'/"; 

$replace = "<a\${1} href=\"?u=" . $base . "\${2}\""; 
$text = preg_replace($pattern, $replace, $text); 
$pattern = "/<img([^>]*) " . 
     "src=\"[^http|ftp|https]([^\"]*)\"/"; 
$replace = "<img\${1} src=\"" . $base . "\${2}\""; 
$text = preg_replace($pattern, $replace, $text); 

$pattern = "/<a([^>]*) " . 
     "href=\"([^\"]*)\"/"; 
$replace = "<a\${1} href=\"?u=" . "\${2}\""; 
$text = preg_replace($pattern, $replace, $text); 

所以

"UsersList.aspx?dir=09" 

與此$基本URL「:

http://www.some-url.com/Members/ 

應及時更換到

"?u=http://www.some-url.com/Members/UsersList.aspx?dir=09" 

,但我得到

"?u=http://www.some-url.com/Members/sersList.aspx?dir=09" 

我不知道什麼在我的正則表達式的問題,以及如何解決它

+1

'[^ http | ftp | https | mailto]'不會做你認爲它做的事情。 '[^ ...]'匹配不是括號內的字符之一的單個字符。這樣匹配不在'htp | fsmailo'中的單個字符。 – Barmar

回答

0
Guess your a tag is like 

<a href="UsersList.aspx?dir=09"></a> 

,它不會使用此模式爲你想要的結果的工作。

$pattern = "/<a([^>]*) " . "href=\"[^http|ftp|https|mailto]([^\"]*)\"/"; 

[^ HTTP | FTP | HTTPS |郵寄地址] - 這個表達式匹配只有一個字符,意思是 'U' 將丟失

嘗試刪除,像

$pattern = "/<a([^>]*) " . "href=\"([^\"]*)\"/"; 
+0

當然有用。但是這個表達式應該只選擇相對的鏈接而不是絕對的。爲絕對它不應該添加基地網址。部分[^ http | ftp | https | mailto]在這裏只負責選擇相關鏈接 –

+1

好的我使用了$ pattern =「/ 」*)「。 「[href = \」([^ http | ftp | https | mailto] [^ \「] *)\」/「;它解決了 –

+0

然後使用/ \」(^ http | ftp | https | mailto)? [^ \「])\」/改爲.. –