2013-03-22 1 views
-1

이 확인을 작동하는 것 같다 :PHP에서 preg_replace를 대체하는 함수를 어떻게 추가 할 수 있습니까?

function findImageTags($string) {  
    $pattern = '/<div(.*?)sourcefile="([^"]+)"(.*?)>(.*?)<\/div>/s'; 
    return preg_replace($pattern, $this->generateImage("$2"), $string); 
} 

function generateImage($url){ 
    return $url; 
} 

을하지만 generateImage 기능에 나는 인수와 함께 뭔가를하려고 할 때 수 없습니다 인수의 값이 $ 대신 2의 진정한 가치이기 때문이다.

그래서이 작동하지 않습니다

function generateImage($url){ 
    $array = explode('.', $url); 
    return $array; 
} 

을 패턴에서 전자로의 대체 방법으로 작동하지 않는 내가이되지 않는 생각한다.

그래서 generateImage()에서 인수의 값을 조작 할 수 있습니까?

+0

저는 preg_replace_callback을 사용하여 외부 메소드를 호출하기 위해 이와 같은 작업을 수행 할 수 있다고 생각했습니다. 배열 (get_class ($ this), 'generateImage') – matt

답변

1

preg_replace 대신 원하는 번호는 preg_replace_callback 일 것입니다. 여기서 대체 값을 반환하는 함수를 사용할 수 있습니다.

0

코드를 지금 코드하는 방식으로 코드 은 preg_replace으로 호출되는 즉시 실행됩니다. 그것은 콜백으로 전달되지 않지만 대신에 먼저 실행되고 출력은 콜백으로 전달됩니다.

해당 함수를 실행하려면 PHP 코드를 문자열로 전달하고 e 수정 자 (자세한 내용은 http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php)를 사용해야합니다.

return preg_replace($pattern, '$this->generateImage("$2")', $string); 

물론 preg_replace_callback()을 사용하십시오.

+0

은 e 수정자가 더 이상 사용되지 않습니까? – matt

+0

더 이상 사용되지 않지만 "보안 상 취약성이 쉽게 생길 수 있으므로 권장하지 않습니다." – Rijk

+0

전자와 함께 작동하지 않는 것 같아요, 패턴을 찾을 수 없습니다 (s와 함께하더라도) – matt

관련 문제