preg_replace — 정규 표현식 검색과 치환을 수행 > 개발자팁

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.

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

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

본문

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

 

[설명]

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

subject를 검색하여 매치된 pattern을 replacement로 치환합니다.

 

[인수]

 

pattern

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

 

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

 

replacement

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

 

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

 

역참조 바로 뒤에 다른 숫자가 따라오는 패턴을 사용할 때는(즉, 매치된 패턴 바로 뒤에 수 문자가 위치), \\1 식의 역참조를 사용할 수 없습니다. 예를 들면, \\11은 preg_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을 반환합니다.

 

 

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

 

<?php

$string = 'April 15, 2003';

$pattern = '/(\w+) (\d+), (\d+)/i';

$replacement = '${1}1,$3';

echo preg_replace($pattern, $replacement, $string);

?>

위 예제의 출력:

 

April1,2003

추천
0

댓글 1개

전체 5,352
개발자팁 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT