2014-12-05 80 views
0

我有串的preg_replace多串(PHP /正則表達式)

[test](test\\-test\\-abc) abcde\\- 

我想有

[test](test-test-abc) abcde\\- 

我需要-與正則表達式/ preg_replace函數替換\\-。 只需要在括號之間替換字符串。我找到了一個解決方案,但它只取代了第一次出現。

$result = preg_replace("/(\[.*?\])(\(.*?)(\\\\-)(.*?\))/", '$1$2-$4', $str); 
+0

這些都不是括號:這些都是括號。 – 2014-12-05 19:00:19

回答

1

您可以使用preg_replace_callback

$str = '[test](test\\\\-test\\\\-abc) abcde\\\\-'; 
$txt = preg_replace_callback('~\([^)]+\)~', 
    function ($m) { return str_replace('\\\\-', '-', $m[0]); }, $str); 
echo $txt; 
//=> [test](test-test-abc) abcde\\-