preg_quote
preg_replace
PCRE 함수 목록
PHP Manual

# 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` [, int `&$count` ]] )

이 함수의 작동은 `replacement` 대신 `callback` 을 지정하는 것을 제외하면, preg_replace()와 거의 동일합니다.

### 인수

`pattern`

  검색할 패턴. 문자열이나 문자열을 가진 배열일 수 있습니다.

`callback`

  `string` 문자열에서 매치한 요소의 배열이 넘겨져서 호출될 콜백. 콜백은 치환할 문자열을 반환해야 합니다.

  종종 단 한번만 preg_replace_callback()에만 사용할 `callback` 함수가 필요합니다. 이러한 경우에 preg_replace_callback() 호출 안에서 create_function()을 사용해서 익명 함수를 선언할 수 있습니다. 이 방법으로 호출에 필요한 모든 정보를 한 군데 위치하게 할 수 있고, 다른 곳에서 사용하지 않는 콜백 함수의 이름으로 함수 이름공간을 어지럽히는 일을 막을 수 있습니다.

  Example #1 preg_replace_callback()과 create_function()

  `/* 유닉스 형식 명령줄 필터로
  * 문단의 첫 대문자를 소문자로 바꿉니다. */
  $fp = fopen("php://stdin", "r") or die("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);
  ?>`

`subject`

  검색 치환할 문자열이나 문자열로 이루어진 배열.

`limit`

  각 `subject` 문자열에 대한 각 패턴의 최대 가능 치환수. 기본값은 -1. (무제한)

`count`

  지정하면, 이 변수는 치환을 마친 수로 채워집니다.

### 반환값

preg_replace_callback()은 `subject` 인수에 따라 배열이나 문자열을 반환합니다.

매치가 발견되면 새 subject가 반환되고, 그렇지 않으면 변경되지 않은 `subject` 가 반환됩니다.

### 변경점

버전 | 설명
--- | ---
5.1.0 | `count` 인수 추가

### 예제

Example #2 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

Example #3 BB 코드를 다루기 위해 재귀 구조를 사용하는 preg_replace_callback()

`<?php
$input = "plain [indent] deep [indent] deeper [/indent] deep [/indent] plain";
function parseTagsRecursive($input)
{
$regex = '#\[indent]((?:[^[]|\[(?!/?indent)|(?R))+)\[/indent]#';
if (is_array($input)) {
$input = '<div style="margin-left: 10px">'.$input[1].'</div>';
}
return preg_replace_callback($regex, 'parseTagRecursive', $input);
}
$output = parseTagsRecursive($input);
echo $output;
?>`

### 참고

- preg_replace() - 정규 표현식 검색과 치환을 수행
- create_function() - Create an anonymous (lambda-style) function
- callback형에 대한 정보

preg_quote
preg_replace
PCRE 함수 목록
PHP Manual