2012-10-21 3 views
0

각 변수의 값을 변수 이름을 대체? Whan 내가, 내가 정규식 몇 가지 일을 해봤 $ 값 $$ 문자열을 만들기 위해하는 것입니다 시도하고 있지만 여기에 작동하지 않는 것은 내 코드입니다 :이 기능을 사용 후여기 샘플의 나는 그것의 값으로 변수 이름을 대체하기 위해 노력하고있어

<?php 

function var_replaced($code) 
{ 
} 
$code = htmlspecialchars(file_get_contents("file.php")); 
$code = preg_replace_callback("/$$ (.+?) /i",'var_replaced', $code); 
echo $code; 
?> 

요점은 var_replaced 내 코드는 다음과 같습니다 :

<?php 
$value = "value2"; 
?> 

이 문제를 해결하는 방법은 무엇입니까?

답변

1

두 가지를 고려해야합니다. 콜백은 다른 로컬 변수 컨텍스트와 함께 실행됩니다. 도달 범위가 외부 $string이되지 않습니다. 따라서 preg_replace/e val 스위치가 필요한 경우 중 하나입니다.

또한 정규식은 사용하지 않습니다. 거기에 공백이 있으며 .+?은 어디에서 멈출 지 모릅니다. 그것은 단지 한 문자를 보았을 것입니다.

여기서 자리 표시자를 제한해야합니다. 영숫자를 찾는 것이 가장 좋습니다.

세 번째로 회선 또는 제목 끝을 나타내는 $을 이스케이프 처리해야합니다.

그래서 당신이 될 것입니다 설명하는지에 대한 접근 방식은 : 당신이 할 수있는 경우

그러나
$code = preg_replace("/[$][$](\w+)/e", '$$$1', $code); 

는 배열에 대체 변수를 쌓아 두는함으로써 _callback 사용합니다. 그런 다음 콜백 배열 조회를 수행합니다

function var_replaced($match) 
{ 
    list(, $varname) = $match; 
    $reference = $GLOBALS["yourvars"][$varname]; 
    $value = $GLOBALS["yourvars"][$reference]; 
    return $value; 
} 

이 수동으로, 다른 변수 이름으로 해석 할 수있는 첫 번째 키를 조회 한 후 다시 변수 이름의 값을 가져옵니다.

나는 그것이 당신이 요구하고있는 것이라면 완전히 우둔합니다.

+0

내가 작성한 정규 표현식이 제대로 작동하지 않습니다. value2 $ string을 $ value ...로 지정하고 싶습니다. $ string ...의 값을 사용하여 ... – ragis

+0

실제로 원하는 경우 소스 코드 변환 및 해석, 정규식하지 않습니다. 정규 표현식 자체는 변수 이름을 찾는 데 사용됩니다. 확장해야 할 것은 대체 콜백의 복잡성입니다. 원하는 것을 원격으로 수행하려면 먼저 변수 이름과 값을 수집 한 다음 두 번째로 파트를 대체해야합니다. 이것은 구문 예제 중 가장 간단한 경우를 제외하고는 달성 할 수 없습니다 (두 변수 선언은 서로 직면합니다). 그래서 아니야. – mario

+0

그래서 할 수 없습니다 .... – ragis

관련 문제