본문 바로가기
Computer Science

[RegExp] 기초 정규 표현식 시작하기

by doongjun 2021. 6. 10.
정규 표현식은 복잡한 문자열을 처리할 때 사용하는 기법으로,
간편하고 직관적인 코드를 작성할 수 있도록 해준다.

 

문자 클래스 [ ]

'[' 와 ']' 사이의 문자들과 매치한다는 의미를 갖는다.

즉, 정규 표현식이 [abc]라면 이 표현식의 의미는 "a, b, c 중 한 개의 문자와 매치"를 뜻한다.

ex) "a", "before", "dude"가 정규식 [abc]와 어떻게 매치되는지 살펴보자.

"a" → 정규식과 일치하는 문자인 "a"가 있으므로 매치

"before" → 정규식과 일치하는 문자인 "b"가 있으므로 매치

"dode" → 정규식과 일치하는 문자인 a, b, c 중 어느 하나도 포함하고 있지 않으므로 매치되지 않음

 

[ ] 안의 두 문자 사이에 하이픈(-)을 사용하면 두 문자 사이의 범위를 의미한다.

ex) [abc] → [a-c], [12345] → [1-5], [a-zA-Z] → 알파벳 모두, [0-9] → 숫자

 

[ ] 안에 ^를 사용할 경우 반대(not)라는 의미를 갖는다.

ex) [^0-9] → 숫자가 아닌 문자

자주 사용하는 문자 클래스
[0-9] 또는 [a-zA-Z] 등은 무척 자주 사용하는 정규 표현식이다. 이렇게 자주 사용하는 정규식은 별도의 표기법으로 표현할 수 있다. 다음을 기억해 두자.
\d 숫자와 매치, [0-9]와 동일한 표현식이다.
\D 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식이다.
\s whitespace 문자와 매치, [ \t\n\r\f\v]와 동일한 표현식이다. 맨 앞의 빈 칸은 공백문자(space)를 의미한다.
\S whitespace 문자가 아닌 것과 매치, [^ \t\n\r\f\v]와 동일한 표현식이다.
\w 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9_]와 동일한 표현식이다.
\W 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9_]와 동일한 표현식이다.
대문자로 사용된 것은 소문자의 반대임을 알 수 있다.

Dot(.)

정규 표현식의 Dot(.) 메타 문자는 줄바꿈 문자인 \n을 제외한 모든 문자와 매치됨을 의미한다. 즉 a와 b라는 문자 사이에 어떤 문자가 들어가도 매치된다는 의미이다.

ex1) a.b → a + 모든문자 + b

"aab" 가운데 문자 "a"가 모든 문자를 의미하는 .과 일치하므로 정규식과 매치된다.

"a0b" 가운데 문자 "0"가 모든 문자를 의미하는 .과 일치하므로 정규식과 매치된다.

"abc" "a"문자와 "b"문자 사이에 어떤 문자라도 하나는있어야 하는 이 정규식과 일치하지 않으므로 매치되지 않는다.

 

만약 앞에서 살펴본 문자클래스[ ] 내에 Dot(.) 메타 문자가 사용된다면 이것은 모든 문자라는 의미가 아닌 문자 그대로의 "."을 의미한다.

ex2) a[.]b → a + Dot(.)문자 + b

"a.b" → "a"와 "b" 사이에 문자 그대로의 "."이 있어 정규식과 매치된다.

"a0b" → "a"와 "b" 문자 사이에 "."이 아닌 다른 문자가 있으므로 매치되지 않는다.

 

반복(*)

*은 *바로 앞에 있는 문자가 0부터 무한대로 반복될 수 있다는 의미이다.

ex) ca*t → c + a가 0~n번 반복 + b

"ct" "a"가 0번 반복되어 매치

"cat" "a"가 0번 이상 반복되어 매치 (1번 반복)

"caaat" "a"가 0번 이상 반복되어 매치 (3번 반복)

 

반복(+)

반복을 나타내는 또 다른 메타 문자로 +가 있다. +는 최소 1번 이상 반복될 때 사용한다. 즉 *가 반복 횟수 0부터라면 +는 반복 횟수 1부터이다. 

ex) ca+t c + a가 1~n번 반복 + b

"ct" → "a"가 0번 반복되어 매치되지 않음

"cat" → "a"가 1번 이상 반복되어 매치 (1번 반복)

"caaat"  "a"가 1번 이상 반복되어 매치 (3번 반복)

 

반복 ({m, n}, ?)

{ } 메타문자를 사용하면 반복 횟수를 m부터 n까지 매치할 수 있다. 또한 m 또는 n을 생략할 수도 있다. 만약 {3,}처럼 사용하면 반복 횟수가 3 이상인 경우이고 {,3}처럼 사용하면 반복 횟수가 3 이하를 의미한다. 생략된 m은 0과 동일하며, 생략된 n은 무한대의 의미를 갖는다.

※ {1,} 은 +와 동일하고, {0,}은 *와 동일하다.

 

ex1) ca{2}t → c + a가 2번 반복 + t

"cat" → "a"가 1번만 반복되어 매치되지 않음

"caat" → "a"가 2번 반복되어 매치

 

ex2) ca{2, 5}t → c + a가 2~5번 반복 + t

"cat" → "a"가 1번만 반복되어 매치되지 않음

"caat" → "a"가 2번 반복되어 매치

"caaaaat"  "a"가 5번 반복되어 매치

 

? 메타문자가 의미하는 것은 {0, 1} 이다.

ex3) ab?c → a + b가 있어도 되고 없어도 된다 + c

"abc" → "b"가 1번 사용되어 매치

"ac" → "b"가 0번 사용되어 매치

 

 

출처 : https://wikidocs.net/4308

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

'Computer Science' 카테고리의 다른 글

[Network] REST 알아보기  (0) 2021.12.17
[Network] Cookie와 Session  (0) 2021.12.13
[Network] HTTP와 HTTPS의 차이  (0) 2021.12.13
[Network] REST API 알아보기  (0) 2021.05.31

댓글