홈으로 | 무료회원가입 | 아이디/비번찾기
추천음악방송
preg replace
11년 전
(PHP 3>= 3.0.9, PHP 4 , PHP 5)

preg_replace -- 정규 표현식 검색과 치환을 수행합니다.
설명
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])


subject를 검색하여 매치된 pattern을 replacement로 치환합니다. limit가 지정되면, limit회의 매치만을 치환합니다; limit가 -1라면, 모든 매치를 치환합니다.

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

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

예 1. 숫자에 대해 역참조 사용하기

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

이 예제의 출력은:

April1,2003




매치가 발견되면, 변환된 subject를 반환하고, 그렇지 않으면 변경되지 않은 subject를 반환합니다.

(limit를 제외한) preg_replace()의 모든 인자에는 일차원 배열을 사용할 수 있습니다. pattern과 replacement에 배열을 사용할 때는, 배열에 나타나는 순서대로 키를 생성합니다. 똑같은 숫자 인덱스 순서를 가질 필요가 없습니다. 어떤 pattern을 어떠한 replacement로 교체할건지를 결정하기 위해서는, preg_replace()를 호출하기 전에 각각의 배열에 ksort()를 실행해야만 합니다.

예 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와 replacemets를 ksort함으로써, 원하던 결과를 얻게 됩니다.

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

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

출력:

The slow black bear jumped over the lazy dog.




subject가 배열이면, subject의 모든 엔트리에 검색과 교체를 실행하고, 배열을 반환합니다.

pattern과 replacement가 배열이면, preg_replace()는 각각의 배열에서 값을 가져와서 subject를 검색하고 치환하는데에 이용합니다. replacement가 pattern보다 적으면, 대응하는 치환값으로 빈 문자열을 사용합니다. pattern 이 배열이고 replacement가 문자열이면, 치환 문자열을 모든 pattern값에 사용합니다. 물론, 이 경우들의 반대는 말이 안됩니다.

/e 변경자는 preg_replace()가 replacement 인자를 참조 치환을 한 후에 PHP 코드로 취급합니다. 팁: replacement가 정상적인 PHP 코드 문자열을 가지게 하십시오. 그렇지 않으면, PHP는 preg_replace()를 포함하는 줄에서 파싱 에러를 출력합니다.

예 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. /e 변경자 사용하기

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

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



예 5. HTML을 텍스트로 변환하기

<?php
// $document는 HTML 문서를 포함합니다.
// 이는 HTML 태그, 자바스크립트 섹션, 공백을
// 제거합니다. 또한, 몇몇 일반적인 HTML 엔티티를
// 동일한 텍스트로 변환합니다.

$search = array ("'<script[^>]*?>.*?</script>'si",  // 자바 스크립트 제거
                 "'<[\/\!]*?[^<>]*?>'si",           // HTML 태그 제거
                 "'([\r\n])[\s]+'",                 // 공백 제거
                 "'&(quot|#34);'i",                 // HTML 엔티티 치환
                 "'&(amp|#38);'i",
                 "'&(lt|#60);'i",
                 "'&(gt|#62);'i",
                 "'&(nbsp|#160);'i",
                 "'&(iexcl|#161);'i",
                 "'&(cent|#162);'i",
                 "'&(pound|#163);'i",
                 "'&(copy|#169);'i",
                 "'&#(\d+);'e");                    // php로 실행

$replace = array ("",
                  "",
                  "\\1",
                  "\"",
                  "&",
                  "<",
                  ">",
                  " ",
                  chr(161),
                  chr(162),
                  chr(163),
                  chr(169),
                  "chr(\\1)");

$text = preg_replace($search, $replace, $document);
?>  



참고: limit 인자는 PHP 4.0.1pl2 이후에 추가되었습니다.
추천추천 : 203 추천 목록
번호 제목
3,030
 제이쿼리 기본 명령어
3,029
 웹페이지 가로 모드세로 모드 인식하기
3,028
 모바일 웹 화면 강제 회전(가로모드 고정)
3,027
 [HTML5]에서 frameset 대체 방법과 iframe 속성
3,026
 HTML <Audio> 사용법
3,025
 윈도우10 시스템파일 손상 (초간단 오류 복구방법!!)
3,024
 PHP 파일 존재 여부 파악하기(로컬 파일 존재 및 원격지 파일 존재)
3,023
 [CSS] 박스 세로 가운데 중앙 정렬 6가지
3,022
 CSS Layout 수평 & 수직 정렬
3,021
 여러 도메인들 간 쿠키 공유하기
3,020
 태그 사이에 있는 텍스트를 추출
3,019
 [JQuery] textbox focus on off일때 숫자 콤마 보여주기
3,018
 쿠키 생성,가져오기,삭제
3,017
 사용자 함수 모음
3,016
 마우스,키보드 제한 ( 오른쪽클릭,드래그,영역선택등..)
3,015
 [HTML5] <video> - DOM으로 제어하기
3,014
 HTML5 video 태그에서 영상 좌우반전
3,013
 PHP - 특정 태그 및 문자열 추출, 제거
3,012
 [PHP] define과 defined의 차이
3,011
 우클릭 완벽차단 스크립트
3,010
 iframe 높이 100% 맞추기
3,009
 curl 함수를 이용한 HTTP REFERER 변경
3,008
 윈도우10 시스템 파일 및 Dism 검사
3,007
 텍스트 줄바꿈, 글자자르기 CSS
3,006
 jQuery Mobile에서 유용한 코드 10가지.
목록
뮤직트로트 부산광역시 부산진구 가야동 ㅣ 개인정보취급방침
Copyright (C) musictrot All rights reserved.