2016-09-22 2 views
2

preg_replace() 또는 preg_replace_callback()에 역 참조를 하나만 바꾸는 방법이 있습니까? 예를 들어,이 정규식은 /(\.popup)([\s\.{])/이고이 문자열은 .popup .popup-option입니다. 생성 될 역 참조는 다음과 같습니다 : $0 = .popup\s, $1 = .popup, $2 = \s. 다른 문자열로 $1 만 바꾸려고합니다. 어떻게해야합니까?PHP 정규 표현식 - 하나의 역 참조 교체

감사합니다.

답변

3

이 같은 preg_replace_callback을 사용할 수 있습니다 : 콜백에서

$s = '.popup .popup-option'; // original string 

echo preg_replace_callback('/(\.popup)([\s\.{])/', function ($m) { 
    return 'foo' . $m[2]; }, $s); 
//=> foo .popup-option 

을 우리가 $m[2] 따라서 만 $m[1] 교체 받고와 연결 일부 대체 문자열 foo을 반환한다.


는 내다을 사용하면 preg_replace에서 동일한 작업을 수행 할 수 있습니다 마십시오 내가 없어진

echo preg_replace('/\.popup(?=[\s\.{])/', 'foo', $s); 
//=> foo .popup-option 
+1

유일한 시나리오는 단지'.popup'이 정규식 작동하지 않는 될 수 있었다 왜냐하면 나는 공간, 점 또는 {. 어느 쪽이든, 나는 대답을'/ ​​\. popup ((? = [\ s \. {]) | \ z) /' –