정규 표현식 기초, 메타 문자

🖤devxyoon·2020년 9월 29일
0

정규 표현식(Regular Expressions)이란?


복잡한 문자열을 처리할 때 사용하는 기법

특정 언어만의 고유 문법이 아니라 문자열을 처리하는 모든 곳에서 사용한다.


정규 표현식은 왜 필요한가?

찾으려는 문자열 또는 바꾸어야 할 문자열의 규칙이 매우 복잡하다면 정규표현식을 사용하게 되면 코드가 상당히 간결해진다.

메타 문자

메타 문자란?


원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용히는 문자를 말한다.

. ^ $ * + ? { } [ ] \ | ( )

정규 표현식에 위 메타 문자를 사용하면 특별한 의미를 갖게 된다.


문자 클래스 []


문자 클래스로 만들어진 정규식은 "[] 사이의 문자들과 매치"라는 의미를 갖는다. 문자 클래스를 만드는 메타 문자인 [] 사이에는 어떤 문자도 들어갈 수 있다.

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

예를 들어 문자열 "a", "before", "dude"가 정규식 [abc]와 어떻게 매치되는지 보자.

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

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

  • [a-zA-z] : 알파벳 모두
  • [0-9] : 숫자

^ 메타 문자


^ 메타 문자를 사용할 경우에는 반대(not)라는 의미를 갖는다. 예를 들어 [^0-9]라는 정규표현식은 숫자가 아닌 문자만 매치된다.

자주 사용하는 문자 클래스

- \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 : 문자+숫자(alphanumberic)가 아닌 문자와 매치, [^a-zA-Z0-9_]와 동일한 표현식이다. 

Dot(.)


정규 표현식의 Dot(.) 메타 문자는 줄바꿈 문자를 제외한 모든 문자와 매치됨을 의미한다.
a.b

위의 정규식의 의미는 "a + 모든문자 + b"라는 의미와 같다. 즉, a와 b라는 문자 사이에 어떤 문자가 들어가도 모두 매치 된다.

이해를 돕기 위해 문자열 "aab", "a0b", "abc"가 정규식 a.b와 어떻게 매치되는지 살펴보자.

  • "aab"는 가운데 문자 "a"가 모든 문자를 의미하는 .과 일치하므로 정규식과 매치된다.
  • "a0b"는 가운데 문자 "0"가 모든 문자를 의미하는 .과 일치하므로 정규식과 매치된다.
  • "abc"는 "a"문자와 "b"문자 사이에 어떤 문자라도 하나는 있어야 하는 이 정규식과 일치하지 않으므로 매치되지 않는다.
a[.]b

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


반복 (*)


ca*t

반복을 의미하는 메타 문자가 사용되었다. * 바로 앞에 있는 문자가 0부터 무한대로 반복될 수 있다는 의미이다.

"ct", "cat", "caaat"와 같은 문자열이 모두 매치된다.

반복 (+)


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

"c + a(1번 이상 반복) + t"의 의미와 동일하다.

반복 ({m, n}, ?)


{} 메타 문자를 사용하면 반복 횟수를 고정 할 수 있다.

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

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

1. {m}

ca{2}t = caat

a를 반드시 2번 반복해야 매치된다.

2. {m, n}

ca{2,5}t

a를 2~5회 반복하면 매치된다. (caat, caaat, caaaat, caaaaat)

3. ?

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

ab?c

위 정규식은 "a + b(있어도 되고 없어도 된다.) + c"의 의미다.
즉, ac와 abc가 매치된다.

profile
서버는 죽지 않아요👼

0개의 댓글