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);
?>