2013-01-25 4 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

그것은 이미 여러 줄에 대해서도 작동합니다. regexp'm' 수식 자에 추가 할 수는 있지만 필요는 없습니다. 테스트 :' "이 문자열 (예제). \ n \ t \ t \ t (foo bar baz) ..." –

0

당신은 재귀 적으로이 작업을 수행해야합니다. 하나의 정규식은 그것을하지 않습니다.

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

첫 번째 패턴은 괄호 안의 모든 텍스트를 찾습니다. 이 일치를 명명 된 메소드 (또는이 경우에는 익명 메소드)에 전달합니다. 메서드의 반환은 일치 된 것을 대체하는 데 사용됩니다.