정규 표현식
Regular Expressions. 정규식이라고도 말한다.
복잡한 문자열을 처리할 때 사용하는 기법으로 문자열을 처리하는 모든 곳에서 사용한다.
정규 표현식을 사용하면 주민등록번호, 전화번호, 이메일 등 일정한 패턴을 가진 문자열을 보다 쉽게 다룰 수 있다.
정규 표현식에서는 아래의 메타 문자를 사용하는데,
. ^ $ * + ? { } [ ] \ | ( )
이 글에서는 각 메타 문자의 의미를 정리할 것이다.
[ ] 문자 클래스
[ ] 사이의 문자들 중 하나를 찾는다.
예로 들어 [abc]의 경우 a, b, c 중 한 개의 문자를 찾겠다는 의미다.
[ ] 내에 -를 사용하면 두 문자 사이의 범위를 의미한다.
- [a-c] : [abc]와 같다.
- [0-5] : [012345]와 같다.
- [a-zA-Z] : 알파벳 모두에 해당한다.
- [0-9] : 숫자에 해당한다.
[ ] 내에는 어떤 문자 또는 메타 문자가 들어올 수 있지만 ^를 사용하는 경우에는 not을 의미하기 때문에 주의해야 한다.
숫자나 영어, 공백과 같이 자주 사용하는 문자 클래스는 별도의 표기법으로도 표기할 수 있다.
표기 | 의미 | 문자 클래스 |
\d | 숫자 | [0-9] |
\D | 숫자가 아닌 것 | [^0-9] |
\s | whitespace | [ \t\n\r\f\v] |
\S | whitespace가 아닌 것 | [^ \t\n\r\f\v] |
\w | 문자와 숫자 | [a-zA-Z0-9_] |
\W | 문자 또는 숫자가 아닌 것 | [^a-zA-Z0-9_] |
. 모든 문자
. 은 줄 바꿈 문자 \n을 제외만 모든 문자를 찾는다.
a.b
는 a + 모든 문자 + b에 해당한다. aab, a0b는 패턴을 만족하지만, abc는 만족하지 않는다.
a[.]b
는 a + . + b에 해당한다. a.b는 만족하지만, a0b 등의 문자열은 만족하지 않는다. [ ] 내의 .은 모든 문자를 의미하는 메타 문자로서의 기능을 상실하고 . 문자 그대로를 의미한다.
* 반복
*는 * 바로 앞에 있는 문자가 0번부터 무한대로 반복될 수 있다는 의미이다.
ca*t
위의 정규식은 ct, cat, caat와 같은 문자열에 해당된다.
+ 반복
+는 + 바로 앞에 있는 문자가 1번부터 무한대로 반복될 수 있다는 의미다.
ca+t
위의 정규식은 cat, caat와 같은 문자열을 만족하지만 ct은 만족하지 않는다.
{m,n} 반복
문자의 반복 횟수를 m번 이상 n번 이하로 제한한다는 의미이다. m 또는 n는 생략할 수 있다.
- {m,n} : m번 이상 n번 이하
ca{2,5}t
참고로 ,와 n 사이에 공백이 있으면 안 된다.
- {m,} : m번 이상. {1,}은 +와 같고, {0,}은 *와 같다.
ca{2,}t
- {,n} : n번 이하
ca{,5}t
- {m} : m번 반복
ca{2}t
?
?는 {0,1}을 의미한다. 즉 ? 앞의 문자가 있거나 없어도 된다는 의미다.
ab?c
는 abc, ac를 둘 다 만족한다.
참고 문서