2014-11-05 2 views
0

나는 다음과 같은 코드가 있습니다PHP의 preg_replace이다

echo preg_replace("/test/","$1000","this is a test"); 

내가 인쇄이 기대 해요 : 대신 내가 갖는 "이"이것은 $ 1000를 " sa 00 "입니다.

이것은 내가 지금 실행중인 문제를 지적한 간단한 예입니다. 이 경우에는 str_replace를 사용할 수 없습니다. 또한 '$'를 '$ 36'으로 바꿀 수는 없지만 '$'상태를 유지하는 '$'및 '$ 36'상태를 유지하는 '$ 36'상태에 의존하는 프로그래밍의 재귀 기능이 있습니다. '.

답변

2

대체 문자열 $은 캡처 그룹에 대한 역 참조를 작성하는 데 사용되므로 이스케이프 처리해야합니다. 원래 코드 $10에서

echo preg_replace("/test/","\\$1000","this is a test"); 

(즉 존재하지 않는) 캡처 그룹 번호 (10)에 대한 역 참조로 해석했다. 역 참조 수는 99 개로 제한되기 때문에 첫 번째 두 자리 만 고려됩니다.

1

은 캡처하는 하위 패턴 즉, 괄호로 캡처 한 하위 참조와 역입니다. $0은 일치하는 문자열 자체를 참조하며 $1은 괄호로 묶은 첫 번째 문자열입니다. 캡처 괄호가 없으므로 비어 있습니다.