정규식(PCRE) preg_replace

(PHP 4, PHP 5, PHP 7, PHP 8)

preg_replace — 정규식 검색 및 바꾸기 수행


설명

preg_replace(
    string|array $pattern,
    string|array $replacement,
    string|array $subject,
    int $limit = -1,
    int &$count = null
): string|array|null
                

pattern과 일치하는 subject을 검색하고 replacement으로 바꿉니다.


매개변수

pattern
검색할 패턴입니다. 문자열이거나 문자열이 있는 배열일 수 있습니다.

여러 PCRE modifiers도 사용할 수 있습니다.

replacement
교체할 문자열 또는 문자열이 있는 배열입니다. 이 매개변수가 문자열이고 pattern 매개변수가 배열이면 모든 패턴이 해당 문자열로 대체됩니다. patternreplacement 매개변수가 모두 배열인 경우 각 patternreplacement 대응으로 대체됩니다. replacement 배열에 pattern 배열보다 요소가 더 적은 경우 추가 pattern은 빈 문자열로 대체됩니다.

replacement\n 또는 $n 형식의 참조를 포함할 수 있으며 후자의 형식이 선호됩니다. 이러한 모든 참조는 n번째 괄호 패턴으로 캡처된 텍스트로 대체됩니다. n은 0에서 99까지 가능하며 \0 또는 $0은 전체 패턴과 일치하는 텍스트를 나타냅니다. 여는 괄호는 캡처하는 하위 패턴의 번호를 얻기 위해 왼쪽에서 오른쪽(1부터 시작)으로 계산됩니다. 문자열 리터럴의 백슬래시는 이스케이프 처리해야 할 수 있습니다.

역참조 바로 뒤에 다른 숫자가 오는 대체 패턴으로 작업할 때(즉, 일치하는 패턴 바로 뒤에 리터럴 숫자 배치) 역참조에 대해 익숙한 \1 표기법을 사용할 수 없습니다. 예를 들어, \11\1 역참조 다음에 리터럴 1이 필요한지 또는 \11 역참조 다음에 아무것도 오지 않는지 알 수 없기 때문에 preg_replace()를 혼동합니다. 이 경우 해결책은 ${1}1을 사용하는 것입니다. 이렇게 하면 1을 리터럴로 남겨두고 격리된 $1 역참조가 생성됩니다.

더 이상 사용되지 않는 e 수정자를 사용할 때 이 함수는 역참조를 대체하는 문자열에서 일부 문자(즉, ', ", \ 및 NULL)를 이스케이프합니다. 이는 작은따옴표 또는 큰따옴표( 예: 'strlen(\'$1\')+strlen("$2")') 해석된 문자열이 어떻게 보이는지 정확히 알기 위해 PHP의 string syntax을 알고 있어야 합니다.

subject
검색하고 바꿀 문자열 또는 문자열이 있는 배열입니다.

subject가 배열이면 subject의 모든 항목에 대해 검색 및 바꾸기가 수행되고 반환 값도 배열입니다.

subject 배열이 연관이면 키가 반환된 값에 보존됩니다.

limit
subject 문자열의 각 패턴에 대해 가능한 최대 대체. 기본값은 -1(제한 없음)입니다.
count
지정된 경우 이 변수는 수행된 교체 수로 채워집니다.

반환 값

preg_replace()subject 매개변수가 배열이면 배열을 반환하고 그렇지 않으면 문자열을 반환합니다.

일치하는 항목이 있으면 새 subject이 반환되고, 그렇지 않으면 subject이 변경되지 않고 반환되거나 오류가 발생한 경우 null이 반환됩니다.


오류/예외

"\e" 수식어를 사용하면 오류가 발생합니다. 이 경우 E_WARNING이 발생합니다.

전달된 정규식 패턴이 유효한 정규식으로 컴파일되지 않으면 E_WARNING이 발생합니다.


Examples

예제 #1 역참조 뒤에 숫자 리터럴 사용

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

위의 예는 다음을 출력합니다.

April1,2003
                

예제 #2 preg_replace()와 함께 인덱스 배열 사용

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

위의 예는 다음을 출력합니다.

The bear black slow jumps over the lazy dog.
                

패턴과 교체를 ksorting하여 원하는 것을 얻어야 합니다.

                  
<?php
ksort($patterns);
ksort($replacements);
echo preg_replace($patterns, $replacements, $string);
?>
                  
                

위의 예는 다음을 출력합니다.

The slow black bear jumps over the lazy dog.
                

예제 #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
                

예제 #4 공백 제거

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

                  
<?php
$str = 'foo   o';
$str = preg_replace('/\s\s+/', ' ', $str);
// This will be 'foo o' now
echo $str;
?>
                  
                

예제 #5 count 매개변수 사용

                  
<?php
$count = 0;

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

위의 예는 다음을 출력합니다.

xp***to
3
                

메모

메모: patternreplacement가 있는 배열을 사용할 때 키는 배열에 나타나는 순서대로 처리됩니다. 이것은 숫자 인덱스 순서와 반드시 같지는 않습니다. 인덱스를 사용하여 어떤 pattern을 어떤 replacement로 대체해야 하는지 식별하는 경우 preg_replace()를 호출하기 전에 각 배열에 대해 ksort()를 수행해야 합니다.

메모:

patternreplacement가 모두 배열인 경우 일치 규칙이 순차적으로 작동합니다. 즉, 두 번째 pattern/replacement 쌍은 원래 문자열이 아닌 첫 번째 pattern/replacement 쌍의 결과인 문자열에서 작동합니다. 두 값을 바꾸는 것과 같이 병렬로 작동하는 교체를 시뮬레이션하려면 한 패턴을 중간 자리 표시자로 교체한 다음 나중에 쌍에서 해당 중간 자리 표시자를 원하는 교체로 교체합니다.

                    
  <?php
  $p = array('/a/', '/b/', '/c/');
  $r = array('b', 'c', 'd');
  print_r(preg_replace($p, $r, 'a'));
  // prints d
  ?>
                    
                  

기타