본문 바로가기
PHP

[PHP] 정규표현식이란?

by teamnova 2023. 12. 18.

오늘은 정규표현식에 대해 알아보겠습니다.

 

정규 표현식은 영어로 Regular Expression으로 문자열을 처리하는 데 사용되는 도구입니다.

정규 표현식에선 특정 패턴을 정의하고, 그 패턴에 맞는 문자열을 찾거나, 대체하거나, 분할하는 등의 작업을 수행할 수 있습니다. 정규 표현식은 문자열 처리에서 매우 유용하고 PHP뿐만이 아니라 많은 프로그래밍 언어와 텍스트 처리 도구에서 지원됩니다.
그렇기 때문에 한번 정규식을 공부해놓으면 앞으로 다양한 환경에서 프로그래밍 시 많은 도움이 될겁니다.

 

먼저 정규식 때 사용하는 문자들부터 알아보겠습니다.

메타문자(정규 표현식에서 특별한 의미를 가진 문자)
? : 0 또는 하나, {0,1} 와 같다. 
+ : 1개 이상, {1,} 와 같다. 
* : 0 개 이상, {0,} 과 같다. 
[] : []안에 있는 문자열 중 한문자.
{} : {} 바로 앞에 있는 문자열(또는 문자)의 개수
() : ()안에 있는 문자들의 그룹화.
( : 참조그룹 시작, ) : 참조그룹 끝. 
| : OR 연산자 기능

플래그(기본 검색 설정)
i : 대소문자 구분하지 않도록 설정
g : 검색 패턴을 비교할 때 일치하는 모든 부분을 선택하도록 설정함.
m : Multi line을 표현하며 대상 문자열이 다중 라인의 문자열인 경우에도 검색하는 것을 의미한다.
y : 문자열의 현재 위치부터 비교를 시작하도록 설정함.
u : 문자열이 UTF-8로 인코딩된 것으로 설정함.

특수 문자 클래스([] 안에서 \와 같이 사용될 수 있다)
w : 영문자, 숫자, _, 기타 스크립트 문자
W : 영문자, 숫자, _, 기타 스크립트 문자를 제외한 문자
s : 공백
S : 공백을 제외한 모든 문자
d : 숫자
D : 숫자가 아닌 모든 문자

기타 특수 문자
^ : 문자열의 시작  
$ : 문자열의 마지막. 행의 끝.
. : 문자열중 임의의 한문자(개행문자 제외)

 

다음 이 문자들을 활용한 예시입니다.

a{2}b : aab 를 가진 문자열을 의미한다. 즉 {} 안에 있는 숫자 2는 {} 앞에 있는 문자 a 의 개수가 2개인 것을 의미한다.
 
(abc) : 찾는 패턴의 전체 또는 일부분을 ()를 사용해서 그룹으로 묶으면 그 내용인 "abc"를 의미한다.
 
사용할 수 있는 문자열을 지정하는 정규 표현식의 문자는 [] 이다.
[-.]? : 하이픈 또는 점이 0번 또는 1번 사용될 수 있다는 의미이고

특정 문자열을 사용할 수 없도록 지정하고 싶다면, 지정하는 대괄호 [] 사이에 삿갓(^) 표시를 입력하면 된다.
[^123] 과 같이 사용하면 1,2,3 숫자는 문자열로 사용할 수 없다.

[] 안의 두 문자 사이에 하이픈(-)을 사용하게 되면 두 문자 사이의 범위(From - To)를 의미한다.
[0-9] : 0 ~ 9 까지의 숫자를 찾는다.
[5-9] : 5 ~ 9 사이의 숫자를 찾는다.
[\d] : 0 ~9 까지의 숫자중 하나
[\D] : 숫자가 아닌 문자를 모두 찾는다.
[^0-9] : 숫자가 아닌 문자를 모두 찾는다.
 
바로 앞 문자열의 반복을 의미하는 *,+,? 문자
.* : 개행문자(\n)를 제외한 임의의 문자를 0개 이상을 의미한다.
[^\n]* : 개행문자(\n)가 아닌 문자를 0개 이상을 의미한다.
 
정규 표현식에서 특수문자를 사용하기 위한 역슬래시(\)
실제 사용해야 할 특수문자가 있을 때는 그 문자 앞에 역슬래시(\)로 해당 문자열을 이스케이프해야 한다.
 
^[_0-9a-zA-Z-] : ^ 는 문자열의 시작을 알리는 것이다. 처음 문자열 시작을 언더바나, 0 에서 9 까지의 숫자나 소문자 a 에서 소문자 z, 대문자 A 에서 대문자 Z 까지 사용
/^[a-z]+$/i : 대소문자 구분없이 알파벳으로 이루어진 문자열
 
\ : 이스케이프 문자. 여러 메타 문자들을 이스케이프하여 그대로 사용할 수 있게 한다.    *, ?, +, [, { ,(, ), }, ], ^, $, |, \, . 등

 

다음에는 정규표현식을 PHP에서 지원하는 메소드를 통해 사용하는 법을 알아보겠습니다.