[Regular Expression] PHP 정규표현식 사용 방법
PHP는 자바스크립트와 유사한 방식으로 정규표현식을 사용합니다. PHP로 정규 표현식을 사용하는 대표적인 함수는 다음 세 가지가 있습니다.
함수 |
설명 |
preg_match() |
찾는 정규표현식과 처음
일치하는 결과가 있는지를 확인합니다. 일치하는 문자열이 있으면 1, 없으면 0을 반환. |
preg_match_all() |
찾는 정규표현식과 일치하는
모든 문자열을 찾아 일치한 개수를 정수로 반환합니다. 없으면 0을 반환. |
preg_replace() |
정규표현식과 일치하는
모든 패턴(들)을 바꾸려는 문자열로 변경. |
일치하는 문자열이 있는지 찾기
PHP는 자바스크립트와 같은 정규표현식 작성 방식을 사용하며, 문자열로 정규표현식 을 정의합니다. 옵션 값 또한 /뒤에 붙여서 표기하는 방식으로 사용합니다.
<?php
$str = "I love PHP. PHP is king.";
$regex = "/php/i";
echo preg_match($regex, $str); // 1
?>
앞의 코드에서 preg_match() 함수를 preg_match_all()로 바꾸면 일치하는 문자열 이 두 개가 되기 때문에 숫자 2가 반환됩니다.
문자열 바꾸기
preg_match()와 사용 방법은 동일하며 preg_replace()로 함수가 바뀌고 두 번째 파리미터가 바꿀 문자열, 세 번째 파라미터가 대상 문자열로 파라미터만 바뀝니다.
<?php
$str = "I love PHP. PHP is king.";
$regex = "/php/i";
echo preg_replace($regex, "Java", $str); // I love Java. Java is king
?>
PHP 정규표현식 플래그 사용
PHP 플래그는 자바스크립트와 마찬가지로 정규표현식 끝의 / 뒤에 붙여서 표시합니다. 소문자로 표시하는 플래그는 자바스크립트 플래그와 기능적으로도 동일합니다.
플래그 |
기능 |
i |
영문 대소문자를 구분하지
않음. |
m |
멀티라인 매치. 시작
매치(^)와 끝 매치($)가 행마다 일치합니다. 캐럿(^)과 달러($) 메타문자에 영향을 주는 플래그입니다. 여러 행 문자열에서 m 플래그가
없으면 전체 문자열의 시작과 끝에만 일치합니다. |
s |
싱글 라인 매치. 멀티라인(m)의
반대가 아니며 다른 용도의 플래그입니다. 플래그 “m”과 중복
사용 가능하니 특히 주의해야 합니다. s 플래그를 사용하면 개행 문자(\n)를 메타문자 “.”과 일치합니다. “.” 메타문자는 개행 문자를
제외한 나머지 모든 문자를 일치하지만 “s”플래그를 사용하면 개행 문자까지 일치에 포함합니다. |
x |
정규 표현식 안에 있는
공백이 모두 무시됩니다. 매칭할 대상 문자열과 관련된 플래그가 아닙니다. 복잡한 정규표현식을 공백으로 띄워서 블록 단위로 구분을 해서 작성할
수 있도록 하는 정규표현식 패턴 보조 플래그입니다. |
u |
정규표현식 패턴과 입력
문자열을 utf-8 유니코드로 처리합니다. 메타문자 중 \w, \s, \d 등에서 유니코드로 매칭이 가능해집니다. |
A |
대상 문자열의 시작
위치에서부터 정규표현식 매칭을 하도록 제한합니다. 캐럿(^)을 사용하지
않고 문자열 시작 위치부터 매칭을 할 때 사용합니다. |
D |
m 플래그를 사용하면
이 플래그는 무시됩니다. 플래그를 켜면 정규표현식 패턴의 $ 메타문자는 개행 문자를 무시하고 전체 문자열의 끝 문자와 매칭을 합니다. 이 플래그가
없으면 개행 문자 앞의 마지막 문자와 비교합니다. |
U |
수량자의 최대 일치(Greedy)
속성을 반대로 뒤집는 플래그입니다. 이 플래그를 켜면 최소 일치 매칭을 하게 됩니다. 플래그가 켜진 상태에서 정규표현식 안에 수량자의 최소 일치를 하는 메타 문자인 “?”가 오면 반대가 되서
최대 일치를 하게 됩니다. |