2013-02-15 45 views
-1

我想用另一個替換數據庫(wordpress)中的一些URL,但這很棘手,因爲很多URL都是重定向。我試圖根據結果來將網址替換爲重定向的網址或我選擇的網址。我可以在沒有任何問題的情況下完成匹配,但我無法替換它。我試過str_replace,但它似乎並沒有取代網址。當我嘗試preg_replace時,它會給出「警告:preg_replace():分隔符不能是字母數字或反斜槓」。任何人都可以用正確的方式指出我做到這一點嗎?用另一個替換一個URL而不用正則表達式

if(preg_match($url_regex,$row['post_content'])){ 
    preg_match_all($url_regex,$row['post_content'],$matches); 

    foreach($matches[0] as $match){ 
     echo "{$row['ID']} \t{$row['post_date']} \t{$row['post_title']}\t{$row['guid']}"; 

     $newUrl = NULL; 
     if(stripos($url_regex,'domain1') !== false || stripos($url_regex,'domain2') !== false || stripos($url_regex,'domain3') !== false){ 
      $match = str_replace('&','&',$match); 

      $ch = curl_init(); 
      curl_setopt($ch,CURLOPT_URL,$match); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
      curl_setopt($ch, CURLOPT_HEADER, true); 
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
      $html = curl_exec($ch); 
      $newUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 

      if(stripos($newUrl,'domain4') !== false) 
       $newUrl = NULL; 

     } 
     else 

     if($newUrl == NULL) 
     { $newUrl = 'http://www.mysite.com/'; 

     } 
     echo "\t$match\t$newUrl"; 
     $content = str_replace($match,$newUrl,$row['post_content']); 
     echo "\t (" . strlen($content).")"; 
     echo "\n"; 

    } 
} 
+1

re error:「警告:preg_replace():分隔符不能是字母數字或反斜槓」 - 向我們顯示正則表達式。聽起來就像你剛剛在表達式中缺少// [[delimiters](http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php))。 – ficuscr 2013-02-15 19:22:41

+0

如果我使用它而不是接近底部的str_replace,則會出現preg_replace錯誤。 preg_replace函數($匹配,$ NEWURL,$行[ 'POST_CONTENT']); – aynber 2013-02-15 19:24:22

+0

爲什麼你不能使用正則表達式來做替換?有問題,但在文本中沒有解釋。 – Thronk 2013-02-15 19:24:51

回答

1

這就是你如何處理Perl正則表達式。

$baesUrlMappings = array('/www.yoursite.com/i' => 'www.mysite.com', 
         '/www.yoursite2.com/i' => 'www.mysite2.com',); 

echo preg_replace(array_keys($baesUrlMappings), array_values($baesUrlMappings), 'http://www.yoursite.com/foo/bar?id=123'); 
echo preg_replace(array_keys($baesUrlMappings), array_values($baesUrlMappings), 'http://www.yoursite2.com/foo/bar?id=123'); 

http://codepad.viper-7.com/2ne7u6

請閱讀使用說明書!你應該能夠弄清楚這一點。

+0

唉,沒有。我在你的代碼中粘貼了我的URL,它出錯了。 – aynber 2013-02-15 19:55:34

+0

唉,如果您無法自己回覆錯誤,請發佈錯誤,閱讀說明書或以其他方式提供有用的信息,這些信息使您很難幫助您。 ESP告訴我它可能需要跳過正則表達式模式中的字符串...... – ficuscr 2013-02-15 19:59:17

+0

對不起,我正在玩那個頁面上的代碼。用/定界符,它給了「警告:preg_replace():未知修飾符'/'」。當然,它會與URL中的所有/。用@分隔符,我沒有收到錯誤,但它也沒有替換URL。 – aynber 2013-02-15 20:01:01

相關問題