정규식
정규식(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를 사용해서 위의 정규식으로 체크를 해서 문자열이 조건에 부합하는지 여부를 확인할 수 있습니다.
감사합니다.
'Language > Algorithm' 카테고리의 다른 글
자료 구조 - 레드-블랙 트리(Red-Black Tree)를 왜 사용할까? (0) | 2022.09.30 |
---|---|
DP(Dynamic Programming) - Top-down과 Bottom-up (0) | 2022.05.28 |
해시 충돌(Hash Collision)이란? [+ 전략 비교]! (0) | 2022.04.24 |
대규모 서비스 - O(log n) 알고리즘을 사용하는 이유 (0) | 2021.12.25 |