나는 정규식 주위에 머리를 얻으려고하고 있으며, 나는 비참하게 실패하고있다.Preg_replace 공백 괄호 사이의 공백
문자열이있어서 두 개의 대괄호 사이에있는 모든 공백을 일치시키고 제거하고 싶습니다. 예를 들어
:
This string (is an example).
가 될 것이라고는 :
This string (isanexample).
나는 정규식 주위에 머리를 얻으려고하고 있으며, 나는 비참하게 실패하고있다.Preg_replace 공백 괄호 사이의 공백
문자열이있어서 두 개의 대괄호 사이에있는 모든 공백을 일치시키고 제거하고 싶습니다. 예를 들어
:
This string (is an example).
가 될 것이라고는 :
This string (isanexample).
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).
당신은 재귀 적으로이 작업을 수행해야합니다. 하나의 정규식은 그것을하지 않습니다.
$line = preg_replace_callback(
'/\(.*\)/',
create_function(
"\$matches",
"return preg_replace('/\s+/g','',\$matches);"
),
$line
);
첫 번째 패턴은 괄호 안의 모든 텍스트를 찾습니다. 이 일치를 명명 된 메소드 (또는이 경우에는 익명 메소드)에 전달합니다. 메서드의 반환은 일치 된 것을 대체하는 데 사용됩니다.
우수! 지금은 새로운 문제가 생겼지 만 데모는 작동합니다 :) 정교하게하려면 여러 줄로, 줄마다 (각 줄에 대괄호를 찾고 각 줄에 대괄호 사이의 공백을 제거하여) 이것을 실행하려면 어떻게해야합니까? –
신경 쓰지 마세요. 내가 잘못했다. 그것은 해결되었습니다 :) –
그것은 이미 여러 줄에 대해서도 작동합니다. regexp'm' 수식 자에 추가 할 수는 있지만 필요는 없습니다. 테스트 :' "이 문자열 (예제). \ n \ t \ t \ t (foo bar baz) ..." –