2009-09-09 2 views
8

음 ... preg_replace를 호출 할 때 변수를 사용하려면 어떻게해야합니까?

작동하지 않았다 :
foreach($numarray as $num => $text) 
    { 
     $patterns[] = '/<ces>(.*?)\+$num(.*?)<\/ces>/'; 
     $replacements[] = '<ces>$1<$text/>$2</ces>'; 
    } 

은 예, $num는 더하기 기호 덧붙일 수있다. 예, " tag the $num as <$text/>"을 원합니다.

답변

12

대체 패턴은 괜찮아 보이지만 일치 패턴에서 작은 따옴표를 사용 했으므로 $ num 변수가 삽입되지 않습니다. 대신,

$patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/'; 
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>'; 

은 또한이 같은 "알 수없는"입력에서 패턴을 구축 할 때, 그것은 일반적으로 preg_quote을 사용하는 것이 좋습니다 참고하십시오. 예 :

$patterns[] = '/<ces>(.*?)\+'.preg_quote($num).'(.*?)<\/ces>/'; 

변수 이름이 주어 지더라도 항상 귀하의 경우 숫자입니다.

+0

감사합니다. Gumbo, Paul - 두 입력 모두 도움이되었습니다. – Steve

12

변수는 strings declared with double quotes에서만 확장됩니다. 당신의 변수는 정규 표현식 메타 문자를 포함 할 수 있습니다 경우

$patterns[]  = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/'; 
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>'; 

당신은 또한 preg_quote을 살펴해야합니다

$patterns[]  = "/<ces>(.*?)\\+$num(.*?)<\\/ces>/"; 
$replacements[] = "<ces>$1<$text/>$2</ces>"; 

또는 사용 문자열 연결 : 그래서 하나는 큰 따옴표를 사용합니다.