2013-02-24 3 views
0

다음과 같은 문자열이 있습니다 : [name-123456].preg 대괄호를 포함하는 문자열 바꾸기

이 문자열의 일치를 미리 정의 된 일부 문자열로 바꾸려고합니다. 여기에 지금까지 무엇을 가지고 :

preg_replace('~\['.$string_to_be_replaced.'\]~', $code_to_replace_it_with, $content); 

현재이 (가 문자열의 일부에도 불구하고), 내가 대괄호를 제거하는 방법을 찾을 수 없습니다 오류가 발생합니다. 그 사람들이 [name-123456]stringofcode으로 바뀌도록 정규식에서 제거되도록하려면 어떻게해야합니까?

편집 :

$string_to_be_replaced = preg_quote($string_to_be_replaced, "~"); 
$content = preg_replace('~\['.$string_to_be_replaced.'\]~', $str_to_replace_with, $content); 

이 단순히 반환 [이름-123456] : P

vardump는 생산 : string(16) "\[name\-123456\]"

답변

1

첫 번째 문제는 당신이 결과를 다시 할당하지 않은 것 같다 :

$content = preg_replace('~...~', $rpl.., $content); 

그런 다음 $string_to_be_replaced은 사전에 preg_quote을 사용합니다. 검색 문자열에 -이 필요합니다.

$string_to_be_replaced = preg_quote($string_to_be_replaced, "~"); 

또한 BTW의 [ 광장 ] 브라켓을 돌볼 것인가.

어설 션이나 복잡한 일치를 수행하지 않으면 str_replace() 일 수 있습니다.

+0

이러한 대괄호 대체 사례가 여러 개있을 수 있습니다. 최종 정규식은 어떻게 생겼습니까? 이것은 : $ string_to_be_replaced = preg_quote ($ string_to_be_replaced, "~"); $ content = preg_replace ('~ \ ['. $ string_to_be_replaced. '\] ~', $ str_to_replace_with, $ content) ;, 미안 슬래시가 제거되었습니다 .. –

+0

예, 그럴듯 해 보입니다. 대괄호 검색 및 관련 대체 문자열 목록이있는 경우에도 'preg_replace_callback'이 더 나은 대안 일 수 있습니다. – mario

+0

위의 수정 사항을 솔루션에서 확인하십시오. –

관련 문제