Language/Algorithm

자주 사용하는 정규식 총 정리!

JaeHoney 2022. 3. 26. 23:40

정규식

정규식(Regular expressions, Regex)는 문자열에서 문자열을 검색, 치환을 위한 용도로 사용합니다.

 

예를 들어, 어떤 문자열이 "name: {text} email: {text} address: {text} phone: {number}" 구조인지 확인해야 한다고 가정합니다.

 

심지어 name은 알파벳이어야 하고, email에서는 @와 .을 허용하고, phone은 숫자여야 하는 등을 구현하려면.. 구현하는 것도 일이고 알아보기도 힘들겁니다.

 

정규식을 사용하면 이를 간결한 코드로 해결할 수 있을 뿐 아니라, 정규식을 사용하면 생각보다 다양한 것을 할 수 있습니다.

 

예시

abc

간단한 문자열을 정규표현식으로 사용하면 해당 문자열들을 선택할 수 있습니다.

abcaabcaaabc

 

a.c

'.'을 사용하면 모든 문자를 의미합니다.

abcaaDcaaa5c

 

Hi|Hello

'|'을 사용하면 or의 의미를 줄 수 있습니다.

Hi man. Hello woman.

 

gr[ae]y

대괄호를 사용하면 []안에 있는 어떤 문자든 포함하는 문자열을 선택할 수 있습니다.

I love grey(gray) color

 

gr[a-b]y

[] 안에서 -을 사용하면 ~부터 ~까지로 작성할 수 있습니다.

gray grby grcy

 

[a-zA-Z]

방금 배웠던 2가지를 조합해서 사용할 수도 있습니다.

Hi i am 123 @@ SUPER

 

[^a-zA-Z]

[] 에서 시작을 ^로 하면 not(제외) 의미가 됩니다. 즉, 결과가 반대로 출력됩니다.

Hi·i·am·123·@@·SUPER

 

ab?c

?는 없거나 있거나를 의미합니다.

I am ab abc

 

ab*c

*는 없거나 있거나 많거나를 의미합니다.

I am ab abc abcccccdd

 

ab+c

+는 하나 또는 많이를 의미합니다.

I am ab abc abcccc

 

ab{2, 5}c

{n}은 n번 반복, {min,}은 최소 반복 수, {min, max}는 취소, 최대 반복 수를 지정할 수 있습니다.

abc abbbc abbbbbbbc

 

^Hi

단어 전에 ^를 사용하면 문장에서 시작하는 문자열만 선택할 수 있습니다.

Hi. my name is Hi

 

Hi$

반대로 단어 후에 $를 사용하면 문장에서 끝나는 문자열만 선택할 수 있습니다.

Hi. my name is Hi

 

\[

정규식에서 사용하는 특수문자의 경우에는 역슬래시 \ 을 사용해서 escape 처리합니다.

Hello [David]

 

(love) | (color)

'()'를 사용하면 그룹을 정의할 수 있습니다. 

I love grey color

그룹으로 정의하면, 해당 그룹에 해당되는 문자열을 조회할 수 있습니다.

System.out.println(matcher.groups[1]); // color

 


정리

그래서 정리했던 것들을 조합해서, 초두에서 말씀 드렸던 어떤 문자열이 형식인지 확인하는 정규식을 구성해보겠습니다.

"name: {text} email: {text} address: {text} phone: {number}"

 

/name: [a-zA-Z]+ email: [a-zA-Z0-9@._]+ address: [a-zA-Z -]+ phone: \d{8,12}/

 

이제 Macher를 사용해서 위의 정규식으로 체크를 해서 문자열이 조건에 부합하는지 여부를 확인할 수 있습니다.

 

감사합니다.