2013-01-25 75 views
3

我試圖讓我的頭繞過正則表達式,而且我失敗了。Preg_replace括號之間的空格

我有一個字符串,我想匹配並刪除兩個括號之間的每個空格。

例如:

This string (is an example). 

將成爲:

This string (isanexample). 

回答

3

您可以使用preg_replace_callback;

$str = "This string (is an example)."; 
$str = preg_replace_callback("~\(([^\)]*)\)~", function($s) { 
    return str_replace(" ", "", "($s[1])"); 
}, $str); 
echo $str; // This string (isanexample). 
+0

非常好!我現在遇到了一個新問題,但是你的演示程序工作:)詳細說明一下,如果我想要在多行,每行上執行此操作(在每行上查找括號並刪除每行上的括號之間的空格),該怎麼辦? –

+0

沒關係。我錯了。已解決:) –

+0

它也適用於多行。你可以添加到正則表達式'm'修飾符,但不需要。測試:'「這個字符串(就是一個例子)。\ n \ t \ t \ t(foo bar baz)...」 –

0

你需要遞歸地做到這一點。一個正則表達式不會這樣做。

$line = preg_replace_callback(
     '/\(.*\)/', 
     create_function(
      "\$matches", 
      "return preg_replace('/\s+/g','',\$matches);" 
     ), 
     $line 
    ); 

這是做什麼的第一個模式找到所有的文字在parens。它將此匹配傳遞給命名方法(或者在這種情況下是匿名方法)。該方法的返回用於替換匹配的內容。