2011-10-11 3 views
0

어떤 이유인지 내 preg_replace 호출이 작동하지 않습니다. 나는 사용할 수없는 것으로 생각할 수있는 모든 것을 확인했습니다. 어떤 제안?PHP preg_replace 아무 것도하지 않습니다

foreach ($this->vars as $key=>$var) 
{ 
    preg_replace("/\{$key\}/", $var, $this->tempContentXML); 
} 

바르 문자열로 대체 될 필요가있는 키 - $> 값을 포함하고있는 배열이고, tempContentXML는 XML 데이터를 포함하는 문자열이다. 문자열

...<table:table-cell table:style-name="Table3.B1" office:value-type="string"><text:p text:style-name="P9">{Reference}</text:p></table:table-cell></table:table-row><table:table-row table:style-name="Table3.1"><... 

EX의

조각입니다.

$this->vars['Reference'] = Test; 
foreach ($this->vars as $key=>$var) 
{ 
    preg_replace("/\{$key\}/", $var, $this->tempContentXML); 
} 

키 $에 배열의 값을 문자열 {참조}를 교체해야하지만이 작동하지 않습니다

.

+0

그 루프가 매우 비효율적이다. preg_replace_callback 및 배열 조회를 사용하십시오. – mario

답변

3

대체가 발생하지 않습니다 (새 문자열이 반환 됨). 게다가

foreach ($this->vars as $key=>$var) { 
    $this->tempContentXML = preg_replace("/\{$key\}/", $var, $this->tempContentXML); 
} 

는, 지금까지 (정규 표현식에 포함되어 있지 않습니다 $this->vars 가정) 일반 문자열 교체에 대한 정규식을 사용하지 마십시오

foreach ($this->vars as $key=>$var) { 
    $this->tempContentXML = str_replace('{'.$key.'}', $var, $this->tempContentXML); 
} 
+2

두 번째 예제의 '{'와'}'는 보간 된 변수를 둘러싸고 있기 때문에 이스케이프해야합니까? – alex

+0

타이 고정. 어쨌든 내장 된 vars를 사용하지 않는 것이 좋습니다. – ThiefMaster

관련 문제