…    일반 문자열 자체를 의미한다.

 

예:    abc - 'abc', 'aabc' (O)

 

.    개행 문자 (즉 “\n")를 제외한 임의의 문자 한 개와 매치한다.

 

예:    a.c - 'abc' (O), 'ac' (X)

 

*    바로 앞에 있는 패턴이 0번 혹은 그 이상 반복되는 것을 의미한다.

 

예:    ab*c - a + b가 0개 이상 + c

 

[]    대괄호 안에 있는 임의의 문자와 매치하는 문자 클래스이다. 그러나 첫 번째 문자가 캐럿(“^”)이면 대괄호 안에 있는 문자를 제외한 어떠한 문자와도 매치한다는 의미가 된다. 대시(“-”)가 대괄호 안에 존재하면 대시 앞뒤 문자 사이의 범위를 가리킨다. 예를 들어, “[0-9]”는 “[0123456789]”와 동일한 의미이다. 문자 클래스에 대시나 대괄호(“]”)를 포함할 수 있도록 하기 위해서, “[” 바로 다음에 나타난 문자가 “-” 혹은 “]”이면 각각의 특별한 의미 없이 문자 그대로 해석한다. POSIX는 비 영어권 문자를 다룰 때 유용한 특수 대괄호를 도입하였다. 대괄호 안에서는 “\” 문자로 시작하는 C 언어의 이스케이프 시퀀스를 제외한 나머지 모든 메타 문자들이 특별한 의미를 상실한다.

 

예:    a[bcd]c - a + b, c, d 중 한 문자 + c

예:    a[^bcd]c - a + b, c, d가 아닌 한 문자 + c

예:    a[a-z]c - a + a ~ z 중 한 문자 + c

 

^    행의 시작에서 정규 표현식의 첫 번째 문자가 매치한다. 한편 대괄호 안에서는 부정의 의미로 사용된다.

 

예:    ^123 - 123, 1230 (O) | 0123 (X)

 

$    행의 끝에서 정규 표현식의 마지막 문자가 매치한다.

 

예:    123$ - 123, 0123 (O) | 1230 (X)

 

{}    괄호 안에 하나 또는 두 개의 숫자를 담고 있을 경우 괄호 앞에 있는 패턴이 몇 번 매치해야 하는지를 가리킨다. 예를 들면 A{1, 3}의 경우 문자 A가 최소 한 번에서 연속 세 번까지 나타나야 함을 뜻한다. 중괄호 안에 특정 이름을 담고 있다면, 그 이름으로 대체한다는 것을 의미한다.

 

{n}    {n} 바로 앞의 문자가 n개다.

 

예:    ab{2}c - a + b가 두 개 + c

 

{n,}    {n,} 바로 앞의 문자가 n개 이상이다.

 

예:    ab{2,}c - a + b가 두 개 이상 + c

 

{n, m}    {n, m} 바로 앞의 문자가 n개 이상 m개 이하이다.

 

예:    ab{2,4}c - a + b가 두 개 이상 4개 이하 + c

 

\    메타 문자들의 의미를 파기하고 C 언어 이스케이프 시퀀스를 표현하는 데 사용한다. 예를 들어, “\n"은 개행 문자이지만 ”\*“은 별표 그 자체를 나타낸다.

 

예:    \*, \+, \^

 

+    앞에 있는 정규 표현식이 한 번이나 그 이상 반복하여 매치할 수 있음을 의미한다. 예를 들면 [0-9]+ 와 같이 쓰일 수 있다. 이 패턴은 “1”, “111” 혹은 “123456”에 매치하지만, 빈 문자열에는 매치하지 않는다. 만약 플러스 기호 대신 별표를 이용하면 빈 문자열도 매치된다.

 

예:    ab+c - a + b가 1개 이상 + c

 

?    앞에 있는 정규 표현식이 0번이나 한 번 나타날 수 있음을 의미한다. 예를 들어 -?[0-9]+ 와 같은 패턴은 숫자 앞에 마이너스 기호를 붙이거나 붙이지 않을지를 결정할 수 있다.

 

예:    ab?c - a + b가 없거나 1개 + c

 

|    앞에 있는 정규 표현식 혹은 뒤에 있는 정규 표현식에 매치한다.

 

예:    cow|pig|apple - cow 또는 pig 또는 apple

 

“...”    따옴표 안에 있는 문자들은 C 언어의 이스케이프 시퀀스를 제외한 모든 메타 문자의 의미를 파기하고 문자 그대로 해석한다.

 

/    ‘/’ 뒤에 있는 정규 표현식이 매치하는 경우에 한해 ‘/’ 앞의 정규 표현식에 매치한다. 예를 들면 0/1의 경우 “01”과 같은 문자열 안에 있는 “0”에 매치하지만, “0” 또는 “02”아 같은 문자열에는 매치하지 않는다. 슬래시 뒤에 있는 패턴과 매치하는 부분은 “사용되지” 않으며, 다음 토큰 검색 과정에서 사용된다. 패턴 한 개 당 슬래시 하나만 허용된다.

 

()    정규 표현식 여러 개를 새로운 정규 표현식 한 개로 묶는다. 예를 들어 (01)의 경우 문자 시퀀스 01을 의미한다. 괄호는 *, +, 그리고 |와 함께 사용하여 복잡한 패턴을 구성할 때 매우 유용하게 쓰인다.

 

(?<GroupName>...)    그룹 매칭을 할 때 <GroupName> 부분이 나중에 프로그래밍 방식으로 결과를 탐색할 때 기준으로 사용된다. 뒤이어오는 ... 부분에 식을 쓴다.

 

예:    (?<First>[0-9]{6})\-(?<Last>[0-9]{7})

 

앞서 나열한 연산자 중에서 몇몇은 ([] 처럼) 문자 하나에 대해서만 작동하는 반면 다른 연산자는 정규 표현식 전체를 상대로 작동한다는 사실에 주목하기 바란다. 보통 복잡한 정규 표현식은 간단한 정규 표현식 여러 개를 모아서 만든다.



출처 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=18&MAEULNO=8&no=1547&page=4

Posted by Sting!

댓글을 달아 주세요