삶의 질을 높여주는 정규 표현식 정리
Regular expressions 정규 표현식 이란?
문자열을 처리하는 형식 언어로 특정한 조건의 문자를 검색하거나 치환 하는데 매우 유용!
Anchor
^abc : 문자열 맨 앞의 abc (1)
abc$ : 문자열 맨 뒤의 abc (2)
^abc$ : abc와 정확히 일치하는 문자열 (3)
abc : 모든 문자열 abc (4)
1. ^abc
- abcdefasd
- asfasfabc
- abcabcabc
2. abc$
- asfasabc
- abcsabcwf
- abcabcabc
3. ^abc$
- abc
- abcsafqbc
- abcabcabc
4. abc
- abcisabc
- asfafabcafasf
- abcabcabc
Quantifiers
abc** ab와 0개 이상의 c를 포함한 문자열 (1)
abc+ ab와 1개 이상의 c를 포함한 문자열 (2)
abc? ab 와 0개 혹은 1개의 c릂 포함한 문자열 (3)
abc{3} ab 와 3개의 c를 포함한 문자열 (4)
abc{3,5} ab와 3~5개 의 c를 포함한 문자열 (5)
abc{3,} ab와 3개 이상의 c를 포함한 문자열 (6)
1. abc**
- abc is alphabet
- abc is abs
- ababcaaaabaaaabcccc
2. abc+
- abc is alphabet
- abc is abs
- ababcaaaabaaaabcccc
3. abc?
- abc is alphabet
- abc is abs
- ababcaaaabaaaabcccc
4. abc{3}
- abc is alphabet
- abc is abs
- ababcaaaabaaaabcccc
5. abc{3,5}
- abc is alphabet
- abc is abs
- abcccccabcaaabaaaabcccc
6. abc{3,}
- aabcc
- aabccc
- aabcccccccccccccccc
Character Classes
\d : 숫자 하나와 매칭합니다.
\w : 글자 하나와 매칭합니다.
\s : 탭, 스페이스, 줄바꿈 등의 공백 문자 하나와 매칭합니다.
\D : 숫자가 아닌 문자 하나와 매칭합니다.
\W : 글자가 아닌 문자 하나와 매칭합니다.
\S : 공백 문자가 아닌 문자 하나와 매칭합니다.
. : 줄바꿈 문자를 제외한 모든 문자 하나와 매칭합니다.
1. a\wc
- abc asews abw atc axcqwe
2. a\dc
- a2c12abc4 a2cww
3. ^a\dc
- a2c12abc4 a2cww
4. a..
- asfwfqf
- asdsadddadwda
Bracket Expression
[abc] : [] 안에 있는 어느 문자와도 매칭합니다 a|b|c 와 동일합니다 (1)
[^abc] : [] 안의 ^는 부정연산자 역할을 합니다. 안에 있지 않은 어느 문자와도 매칭합니다 (2)
[a-c] : 범위지정 연산자 - 를 사용하면 a~c 까지의 어느 문자와도 매칭합니다. (3)
1.[abc]
- abcdefghijklmnop alphabet apple bear
2.[^abc]
- asdbcasdsa
3.[a-c]
- aebecd
Grouping And Capturing
Capturing 은 문자열을 검색할 때 유용하게 사용됩니다.
a(bc)** : () 는 캡쳐 그룹을 생성합니다. 예제는 a와 bc 가 0회 이상 반복된 문자열을 찾습니다.
a(?:bc)** : (?:) 는 그룹을 생성하지만 캡쳐하지는 않습니다. () 와 동일한 문자열을 매칭하지만 조건절, Back Reference 등을 사용할 때, 캡쳐링 되지 않습니다.
a(?<named>bc) : (?<named>) 는 캡쳐 그룹의 이름을 지정합니다. 예제는 named 라는 캡쳐 그룹을 생성했습니다.
Look ahead, behind
a(?=b) : b가 바로 뒤에있는 a 를 찾습니다. b 는 매칭되지 않습니다.
(?<=b)a : b가 바로 앞에있는 a 를 찾습니다. b 는 매칭되지 않습니다.
= 대신에 ! 를 사용하면 부정 연산자가 됩니다.
a(?!b) : b가 바로 뒤에 없는 a 를 찾습니다. b 는 매칭되지 않습니다.
(?<!b) : b가 바로 뒤에 없는 a 를 찾습니다. b 는 매칭되지 않습니다.
Back Reference
Back Reference 는 캡쳐 그룹을 찾는 방법입니다.
([abc])(bcd)\숫자 : \숫자는 해당 캡쳐그룹과 동일한 패턴과 매칭됩니다 (1)
(?<named>[abc])\k<named> : \k<named> 는 해당 이름의 캡쳐 그룹과 매칭됩니다. (2)
1. (abc)(bcd)\2\1
- abcbcdbcdabc
- abcdefghijkabc
- abababcbcdbcdabcabab
2. (?abc)\k
- abababc
- eeabcabcee
- abceeeeabcabceeabc
Flags
정규식은 일반적으로 \ \ 사이에 작성합니다.
닫는 \ 뒤에 Flag 를 지정할 수 있습니다.
g(global): 문자열에서 매칭되는 모든 항목을 찾습니다
m(multi line): 모든 문자열에서 매칭하는 것이 아닌 Line 별로 매칭합니다. ^, $ 를 사용할 때 유용합니다.
i(insensitive): 대소문자 구분을 무시하고 매칭합니다.
Useful Regex
실무에서 작업하면서 사용한 정규식을 나중을 위해 정리해둡니다.
- 휴대폰 번호
^01([0|1|6|7|8|9]?)([0-9]{3,4})([0-9]{4})$
- 주민등록번호
\\d{2}([0]\\d|[1][0-2])([0][1-9]|[1-2]\\d|[3][0-1])[1-4]\\d{6}
- 특수문자 제한 (알파벳과 한글 숫자, 언더바 와 하이픈만 허용)
^[a-zA-Z0-9_\\-ㄱ-ㅎㅏ-ㅣ가-힣]**$