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는 주어진 문자열에 매치되는 요소의
배열을 콜해서 넘깁니다. 콜백은 치환된 문자열을 반환해야 합니다.
예 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() 호출 안에서 익명의
함수를 만들 수 있습니다. 이 방법으로 호출에 필요한 모든 정보를
한군데에 위치하게 하여, 다른곳에서 사용되지 않는 콜백함수의
네임스페이스를 절약할 수 있습니다.
예 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().