2012-12-07 2 views
2

나는, {}}에 의해 {{}}에 의해 {를 교체합니다. 입력으로 입력 한 경우 {blah} 내 스크립트에서 {{}blah{}}을 출력하고 싶습니다. 그러나 내가 논리적

$output = str_replace(array("}", "{"), array("{}}", "{{}"), '{blah}'); 

을 짓 모습을 작동하지 않습니다하지만 출력으로 나는이있어 : 대신 교체 자체는 검색 할 문자열을 포함하고 있기 때문에입니다 {{}blah{}}

답변

4

PHP는 당신이 $의 검색 매개 변수에 넣어 각 배열 항목의 전체 문자열을 반복 할.

그것은 당신의 첫 번째 배열 항목 '{'으로 '{blah{}}''{blah}'를 교체 사실되어 제 1 교체 후 또 다른 '{''{{}blah{{}}}'에 그에서 있기 때문에.

단일 정규식 패턴을 사용하여 정규 표현식을 사용하면 입력 문자열에서 한 번만 실행하는 것이 좋습니다.

$str = preg_replace('/(\{|\})/', '{\\1}', '{blah}'); 
+0

+1. 내 대답의 좋은 최적화 :) –

+0

대단히 감사합니다! –

2

{{}blah{{}}}을. 내가 대신 preg_replace_callback 그것을 다시 것 :

echo preg_replace_callback('/{|}/', function($match) { 
    return $match[0] == '{' ? '{{}' : '{}}'; 
}, '{bla}'); 

// {{}bla{}}