2016-12-02 112 views
1

我有一系列包含URL的大型降價字符串,大多數網址都很好,但是其中一些在更改格式時被破壞,它們有一些破折號(「 - 」)被改爲空格字符。可以preg_replace_callback()保存變量的元素?

我一直試圖使用preg_replace_callback()來修復它們在PHP中加載時的問題。

例子:在大串

[Site Name](http://www.siteurl.com/this-is-the-website broken url) 

由於這些都包含在(即通常有文本的段落4-5),並可能在文本1-3 +網址,我需要遍歷他們捕獲字符串,刪除用短劃線代替它的空白並將其返回到正確的位置。

目前我已經得到了匹配的照顧:

$postBody = preg_replace_callback("^(\([A-Za-z\:\/0-9\-.\s]*\))^",'urlcallback', $postBody); 

而且我試圖創建函數:

function urlcallback ($matches) { 
static $id = 0; 
$matches[$id] = preg_replace("^\s^", "-", $matches); 
return $matches[$id]; 
$id++; 
} 

我preg_replace_callback的理解()是,它會調用該函數每次遇到匹配的字符串,並將該函數的返回放在該點上,但是當我得到錯誤時:

Notice: Array to string conversion in cleanup.php at line 139 

第139行是我的早期$ postBody聲明,我假設preg_replace_callback()同時處理所有匹配,所以我不知道如何將它們傳回字符串,而只更改空白每一個?

回答

2

問題似乎是這樣的線:

$matches[$id] = preg_replace("^\s", "-", $matches); 

作爲$matches是一個數組不是字符串值。

它應該是:

$matches[$id] = preg_replace('/\s/', "-", $matches[0]); 

$matches[0]代表preg_replace_callback函數調用整個匹配的字符串。

+0

該行是: $ matches [$ id] = preg_replace(「^ \ s ^」,「 - 」,$ matches);使用^作爲分隔符 – AdamSC

+0

不給我錯誤「未定義偏移量爲2」 – AdamSC

+0

ok試試:'$ matches [$ id] = preg_replace('/ \ s /',「 - 」,$ matches [0]);'' – anubhava

相關問題