Forum und email

preg_replace_callback

(PHP 4 >= 4.0.5, PHP 5)

preg_replace_callback — 콜백을 이용한 정규 표현식 검색과 치환을 수행합니다.

설명

mixed preg_replace_callback ( mixed $pattern , callback $callback , mixed $subject [, int $limit ] )

이 함수의 작동은 replacement 대신 callback 를 지정하는 것을 제외하면, preg_replace()와 거의 동일합니다. callback 는 주어진 문자열에 매치되는 요소의 배열을 콜해서 넘깁니다. 콜백은 치환된 문자열을 반환해야 합니다.

Example#1 preg_replace_callback() 예제

<?php
  
// 이 문장은 2002년에 사용되었습니다.
  // 2003년에 적합하게 업데이트합니다.
  
$text "April fools day is 04/01/2002\n";
  
$text.= "Last christmas was 12/24/2001\n";

  
// 콜백 함수
  
function next_year($matches)
  {
    
// 보통: $matches[0]는 전채 매치입니다.
    // $matches[1]은 첫번째 '(...)'에 들어있는
    // 서브 패턴 매치로 이어집니다.
    
return $matches[1].($matches[2]+1);
  }

  echo 
preg_replace_callback(
              
"|(\d{2}/\d{2}/)(\d{4})|",
              
"next_year"$text);

  
// 결과는:
  // April fools day is 04/01/2003
  // Last christmas was 12/24/2002
?>

종종 단 한번의 preg_replace_callback()에서 사용하기 위한 callback 함수가 필요합니다. 이 경우에, create_function()을 사용해서 preg_replace_callback() 호출 안에서 익명의 함수를 만들 수 있습니다. 이 방법으로 호출에 필요한 모든 정보를 한군데에 위치하게 하여, 다른곳에서 사용되지 않는 콜백함수의 네임스페이스를 절약할 수 있습니다.

Example#2 preg_replace_callback()create_function()

<?php
  
/* 문단 첫번째의 대문자를 소문자로 변경하는
   * 유닉스 스타일 명령줄 필터 */

  
$fp fopen("php://stdin""r") or die("can't read stdin");
  while (!
feof($fp)) {
      
$line fgets($fp);
      
$line preg_replace_callback(
          
'|<p>\s*\w|',
          
create_function(
              
// 여기에선 싱글 쿼트(')가 적합합니다.
              // 그렇지 않으면 모든 $를 \$로 이스케이프 해야합니다.
              
'$matches',
              
'return strtolower($matches[0]);'
          
),
          
$line
      
);
      echo 
$line;
  }
  
fclose($fp);
?>

참고: preg_replace(), create_function().