PHP 에서 메타 문자를 이용해 정규표현식 구현하기

PHP

PHP 에서 메타 문자를 이용해 정규표현식 구현하기

 

개발환경 : window 7 32bit

 

정규표현식은 어느 웹 어플리케이션이나 등장하는 주제이다. 주로 JSP

javascript 에서 구현을 해보았는데 이번에는 PHP 에서 어떻게 표현을

하는지 알아본다.

 

정규식은 특수문자로 일정한 패턴을 찾아 치환을 하거나 값에 대한

유효성 체크로 많이 이용된다. 직접 코딩으로 로직을 짜게 되면 복잡한

패턴이 되지만 정규표현식을 사용하면 간단하게 구현이 가능하기 때문에

필수로 알아야 되는 지식이다.

예를 들어 주민번호나 이메일등등이 된다. 좀 암호같아서 처음엔 거부감이

생기지만 자꾸 보다 보면 익숙해지고 편해질 것이다.

 

1. 정규 표현식을 나타내기 위한 메타 문자들

 

. 마침표(Period)

어떤 문자든 임의의 한 문자를 나타낸다 예를 들어 ‘b.b’ 처럼 단어 사이에

마침표가 들어간 패턴을 찾는다고 해보자. abab 의 단어에서 찾아지는 것은

bab 일 것이다. 그러니까 b b 사이에 어떤문자든 하나가 포함된 단어를

찾는다는 것이다.

 

* 애스터리스크(Asterisk)

바로 앞문자가 0 번이상 반복되는 문자열을 찾으라는 것이다. 메타문자 +

와 달리 0 번이상이므로 없는 것도 가능하다. ‘ab*c’ 가 있다고 하자.

이것은 a b 는 하나씩 그 자리에 있고 b 단어가 반복되는 패턴의

문자열을 찾는다. 찾아지는 문자는 ab, abc, abbc, abbbc 가 될것이다.

 

+ 플러스(Plus)

바로 앞문자가 1번이상 반복되는 문자열을 찾으라는 것이다.

바로위 메타문자 * 애스터리스크와 차이는 바로 앞문자가 포함이 안되면

찾지 않는 것이다. ‘ab+c’ 를 찾게 되면 abc, abbc, abbbc 가 찾아 진다.

 

? 물음표

바로 앞문자가 있거나 없거나 이다. ‘ab?c’ 를 찾게 되면 ac, abc 가 된다

 

[] 대괄호(Bracket)

대괄호 내에 문자중 하나만 나타내는 것이다. 만약 123 이 있으면 각각의

1,2,3 에 해당하는 숫자중 하나만 포함되도 찾는 다는 것이다.

예를 들어 ‘[123]55’ 를 찾는다고 하자. 그럼 155, 255, 355 가 찾아지는 것이다.

이것을 범위와 기호로 표현이 가능한데 대괄호 안데 많은 것들을 집어 넣으면

복잡해 지니까 기호로 간단하게 표현한 것이다.

범위는 ‘-’ 하이픈을 사용한다. [1-4] 라고 하면 [1234] 가 대괄호에 들어가는 것이다.

문자 [a-c] [abc] 와 같다.

그리고 이것의 부정을 나타낼려면 대괄호 사이에 ‘^’ 캐럿을 앞에 위치시킨다.

[a-c] 의 부정은 [^[a-c]] 가 되는 것이다.

 

^ 캐럿(Carat)

두가지의 용도가 있는데 위에서 보았듯이 [] 대괄호 안에 사용되면 부정을 의미하고

정규표현식의 첫 문자로 사용되면 ^ 다음에 나오는 문자가 항상 문자열의 첫문자가

되어야 한다. ^abc 를 찾는다고 하면 abccc, abcdd 등이 된다.

 

$ 달러사인(Dollar Sing)

앞에 나오는 문자가 문자열의 종료에 위치해야 한다. ‘[0-9]$’ 표현식은 0~9 까지

숫자가 끝에 포함된 문자열을 찾으라는 것인데 ab1, ab2, ab9 등이 찾아 질것이다.

 

{} 중괄호 (brace)

중괄호 안에 있는 문자나 문자열의 반복 회수를 정한다. , 콤마로 구분에서 범위도 

가능하다. {2,3} 이면 2~3 개 사이에 포함된 문자열을 의미하고 {2, } 처럼 뒤에

값이 없으면 2 개이상이라는 것이다.

ab{2, } 이면 abb, abbb… 가 찾아 지고 ab{2,4} 이면 abb, abbb, abbbb 만 찾아진다.

 

() 괄호

문자를 그룹화 해서 묶는다. a(bc)* 라는 표현식은 bc 라는 문자열을 0번이상 반복해서

찾으라는 것이다. a, abc, abcbc 등이 될것이다.

 

| 버티컬바(Verticalbar)

논리연산자 OR 을 의미한다. a|b 이라면 a 혹은 b 둘중 하나가 포함된 문자열을

찾으라는 말이다.

 

2. 정규표현식 예제

 

(1) 이메일정규식 표현하는데 아이디 부분은 _ 언더바 나 알파벳으로 시작해야 하고

0 번이상 반복해서 사용될수 있다. 다음에 나오는 @엣사인이 있어야 하고 그 다음에

알파벳이나 숫자, - 하이픈 이 한번이상 반복되며 . 마침표는 한번 반복된다.

 

^[_a-zA-Z][_a-zA-Z0-9]*@[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+){1,3}$

 

(2) 자연수 숫자 1, 2, 3, 4 …. 표현한다 첫글자는 숫자이고 마지막 문자도 숫자이다.

 

^[1-9][0-9]*$

 

(3) 정수집한인 -3, -2, -1, 0, 1, 2, 3 을 표현해 본다

 

^(0|-?[1-9][0-9]*)$

Posted by 녹두장군