본문 바로가기
시리즈/자바

[JAVA] 몰라서 못 썼던 정규 표현식을 알아보자 ①

by 되고싶은노력가 2024. 10. 19.

[ 정규표현식 시리즈 ]

몰라서 못 썼던 정규 표현식을 알아보자 ①

몰라서 못 썼던 정규 표현식을 알아보자 ②

몰라서 못 썼던 정규 표현식을 알아보자 ③

몰라서 못 썼던 정규 표현식을 알아보자 ④


 

정규 표현식 예시

 

정규 표현식에 대해 알아보고자 자료를 찾다보면 위 이미지를 자주 마주치는 것 같습니다. 매번 보면서 어떻게 쓰이는지 대강 이해하는 식으로 넘어갔는데 이번에 정규표현식을 적용해 볼 기회가 생겨 제대로 알아보자는 생각에 찾아보면서 공부할 겸 이 글을 작성하게 되었습니다. 


# 정규표현식의 기본

정규 표현식에는 기본이 되는 연산이 있습니다. 그것은 바로 접합, 선택 그리고 반복 연산입니다.

 

접합 연산

"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

 

위 텍스트에서 labor 라는 텍스트를 찾기 위해서는 일반적으로 labor 라는 정규 표현식을 그대로 입력하겠지만 사실 이 labor 라는 정규 표현식은 l, a, b, o, r 라는 글자에 대응하는 정규 표현식 리터털들이 접합된 형태입니다. 이는 기본적으로 적용되는 원칙으로 이러한 연산이 아닌 _ 등의 기호를 통해서 나타냈었다면 l_a_b_o_r 라는 불편한 형태를 띄었을겁니다.

 

선택 연산

선택 연산은 여러 패턴 중에 한가지를 선택해서 일치시키는 연산으로 | 연산자를 사용하여 나열합니다. 논리 연산으로 치면 OR 연산에 가깝죠. 매우 간단한 예로는 abcd 와 ABCD 두 문자열을 모두 찾고 싶을 때는 abcd | ABCD 같은 식으로 사용할 수 있습니다.

 

반복 연산

정규 표현식에서 반복 연산은 0 이상의 임의의 횟수만큼을 반복한다는 것을 의미합니다. 표현하는 연산자는 * 입니다. 예를 들어 숫자만으로 구성된 길이 1 이상의 문자열을 찾는 정규 표현식은 아래와 같이 표현할 수 있습니다.

 

" (0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* "

 

앞서 말씀드렸다 싶이 * 은 0 이상의 임의의 횟수만큼 반복을 의미하지만 위 예시는 길이가 1 이상의 문자열을 찾는 정규 표현식을 표현했어야 하기에 " (0|1|2|3|4|5|6|7|8|9) " 가 앞에 존재하는 것입니다.

 

 

정규 표현식의 세 연산은 우선 순위가 존재하며  반복 > 접합 > 선택의 우선순위를 가집니다. 이를 유의해서 작성해야합니다.

 


참고자료

https://kasterra.github.io/regex1-the-basic-operation/