[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) 속성을 반대로 뒤집는 플래그입니다. 이 플래그를 켜면 최소 일치 매칭을 하게 됩니다. 플래그가 켜진 상태에서 정규표현식 안에 수량자의 최소 일치를 하는 메타 문자인 “?”가 오면 반대가 되서 최대 일치를 하게 됩니다.