update : 2015.11.03
php.shukuma.com

검색:
 
 
정규 표현식 검색과 치환을 수행

preg_replace

(PHP 4, PHP 5)

preg_replace정규 표현식 검색과 치환을 수행

설명

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit [, int &$count ]] )

subject를 검색하여 매치된 patternreplacement로 치환합니다.

인수

pattern

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

/e 변경자는 preg_replace()replacement 인수를 참조 치환을 하고 PHP 코드로 취급하도록 합니다. 팁: replacement가 정상적인 PHP 코드 문자열을 가지게 하십시오. 그렇지 않으면, PHP는 preg_replace()를 포함하는 줄에서 해석 오류를 일으킵니다.

replacement

치환할 문자열이나 문자열을 가진 배열. 이 인수가 문자열이고 pattern 인수가 배열이면, 모든 패턴은 해당 문자열로 치환됩니다. patternreplacement 인수가 모두 배열이면, 각 pattern은 해당하는 replacement로 치환됩니다. pattern 배열보다 replacement 배열보다 적은 원소를 가지고 있으면, 남는 pattern은 빈 문자열로 치환됩니다.

replacement\\n나 (PHP 4.0.4부터) $n 형태의 참조를 포함할 수 있습니다. 그러한 모든 참조는 n번째로 잡은 괄호 패턴으로 대체됩니다. n은 0에서 99까지 가능하고, \\0$0는 전체 패턴에 매치한 텍스트를 의미합니다. 괄호를 여는것은 서브패턴을 포함하여 왼쪽에서 오른쪽(1로부터 시작)으로 카운트합니다. replacement에 백슬래시를 사용할 때는, 이중으로 해야 합니다. ("\\\\" PHP 문자열)

역참조 바로 뒤에 다른 숫자가 따라오는 패턴을 사용할 때는(즉, 매치된 패턴 바로 뒤에 수 문자가 위치), \\1 식의 역참조를 사용할 수 없습니다. 예를 들면, \\11preg_replace()에서 문자 1이 따라오는 역참조 \\1인지, 역참조 \\1인지 구분할 수 없습니다. 이 경우, 해결책은 \${1}1를 사용합니다. 이는 독립된 역참조 $1를 작성하고, 1을 문자로 남겨놓습니다.

e 변경자를 사용할 때, 이 함수는 역참조로 치환한 문자열에서 몇몇 문자(', ", \, NULL)를 이스케이프합니다. 이는 홑따옴표나 곁따옴표로 이루어진 역참조 사용에서 구문 오류를 막기 위해서 이루어집니다. (예. 'strlen(\'$1\')+strlen("$2")') PHP의 문자열 구문을 확인하여 문자열이 어떻게 해석되고 보여지는지 정확히 이해할 필요가 있습니다.

subject

검색 치환할 문자열이나 문자열을 가진 배열.

subject가 배열이면, 검색 치환은 모든 subject에 이루어지고, 반환값도 배열이 됩니다.

limit

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

count

지정하면, 이 변수는 치환이 일어난 횟수로 채워집니다.

반환값

preg_replace()subject 인수엣 따라서 배열이나 문자열을 반환합니다.

매치가 발견되면 새 subject를 반환하고, 그렇지 않으면 변경되지 않은 subject를 반환합니다. 오류가 발생하면 NULL을 반환합니다.

변경점

버전 설명
5.1.0 count 인수 추가
4.0.4 replacement 인수에 '$n' 형식 추가
4.0.2 limit 인수 추가

예제

Example #1 수가 따라오는 역참조 사용하기

<?php
$string 
'April 15, 2003';
$pattern '/(\w+) (\d+), (\d+)/i';
$replacement '${1}1,$3';
echo 
preg_replace($pattern$replacement$string);
?>

위 예제의 출력:

April1,2003

Example #2 preg_replace()와 인덱스 배열 사용하기

<?php
$string 
'The quick brown fox jumped over the lazy dog.';
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo 
preg_replace($patterns$replacements$string);
?>

위 예제의 출력:

The bear black slow jumped over the lazy dog.

patterns와 replacements를 ksort해서, 원하던 결과를 얻습니다.

<?php
ksort
($patterns);
ksort($replacements);

echo 
preg_replace($patterns$replacements$string);
?>

위 예제의 출력:

The slow black bear jumped over the lazy dog.

Example #3 여러 값 치환하기

<?php
$patterns 
= array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/',
                   
'/^\s*{(\w+)}\s*=/');
$replace = array ('\3/\4/\1\2''$\1 =');
echo 
preg_replace($patterns$replace'{startDate} = 1999-5-27');
?>

위 예제의 출력:

$startDate = 5/27/1999

Example #4 'e' 변경자 사용하기

<?php
preg_replace
("/(<\/?)(\w+)([^>]*>)/e"
             
"'\\1'.strtoupper('\\2').'\\3'"
             
$html_body);
?>

위 예제는 입력된 텍스트의 모든 HTML 태그를 대문자로 변경합니다.

Example #5 공백 제거하기

이 예제는 문자열에서 초과된 공백을 제거합니다.

<?php
$str 
'foo   o';
$str preg_replace('/\s\s+/'' '$str);
// 이제 'foo o'가 됩니다.
echo $str;
?>

Example #6 count 인수 사용하기

<?php
$count 
0;

echo 
preg_replace(array('/\d/''/\s/'), '*''xp 4 to', -1$count);
echo 
$count//3
?>

위 예제의 출력:

xp***to
3

주의

Note:

patternreplacement에 배열을 사용할 때, 키는 배열에 나타난 순서대로 처리합니다. 동일한 숫자 인덱스 순서를 가질 필요가 없습니다. 어떤 patternreplacement로 치환할 지 인덱스로 정한다면, preg_replace()를 호출하기 전에 각 배열에 ksort()를 수행해야 합니다.

참고