상세 컨텐츠

본문 제목

Regular Expression - 하위 표현식

Development/Algorithm

by thisisnew 2022. 12. 2. 00:01

본문

반응형

 

7. 하위 표현식

 

7-1. 하위 표현식의 정의

 

https://thisisnew-storage.tistory.com/115

 

Regular Expression - 특정 위치에서의 검색

6. 특정 위치에서의 검색 6-1. 경계 지정의 필요성 문자열 검색 시 경계를 지정하는 것은 무척 중요합니다. 찾고자 하는 문자열이 완벽하게 일치하지 않을 수 있기 때문이죠. 가령 code라는 단어를

thisisnew-storage.tistory.com

이전 글에서 특정 위치에서의 검색에 대해 다뤘습니다.

 

어떤 문자의 뒤에 더하기(+), 별표(*), 물음표(?) 등을 사용하면 그 문자의 반복 여부를 설정할 수 있었죠.

근데 여기서 중요한 사실은,  이 메타 문자들이 바로 앞 문자에만 적용된다는 점입니다.

 

아래의 예시처럼 반복되는 World라는 단어를 찾아내고 싶을 때, 지금까지 배운 것을 토대로 사용하면 이렇게 됩니다.

`World{2,}`gm

하지만 아무것도 일치하지 않죠.

이유는 {2,}는 바로 앞의 d에만 적용되기 때문입니다.

 

그래서 이런 표현식의 범위를 지정해줘야 하는데요.

이때 필요한 것이 하위 표현식입니다.

간단하게 괄호로 묶어주면 됩니다.

`(World){2,}`gm

World를 괄호로 묶어주니, 이렇게 하나의 항목으로 취급되는 것을 볼 수 있습니다.

 

이번에는 다른 예시도 볼게요.

IP 주소와 일치하는 정규식인데요.

`\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}`gm

이것도 하위 표현식을 사용하여 아래와 같이 바꿀 수 있습니다.

`(\d{1,3}\.){3}\d{1,3}`gm

이렇게 동일한 표현식을 하나로 묶어 반복 처리할 수 있습니다.

 

 

7-2. 중첩된 하위 표현식

 

그런데 위의 표현식에는 문제가 있습니다.

IP주소의 각 숫자 묶음은 의미와 제한이 있는데, 위의 정규식에는 그게 반영되어 있지 않죠.

 

그래서 이런 엉터리 주소 하고도 일치하게 됩니다.

 

먼저 IPv4 주소 기준으로 숫자 묶음들에 고려되어야 될 사항들은 다음과 같습니다.

  • 25로 시작하며 끝자리가 0~5 사이인 세 자리 숫자
  • 가운데 숫자가 0~4까지인 2로 시작하는 세 자리 숫자 
  • 1로 시작하는 세 자리 숫자
  • 한자리 혹은 두 자리 숫자

이 사항들을 하위 표현식을 중첩하여 OR조건으로 연결해줘야 합니다.

프로그래밍 언어에서 OR조건으로 연결된 조건문을 작성하는 것과 비슷하다고 생각하시면 될 것 같네요.

OR조건으로 연결할 때는 | 문자를 사용하면 됩니다.

 

위의 조건들을 반영하여 작성하면 다음과 같습니다.

`((25[0-5]|2[0-4]\d|1\d\d|\d{1,2})\.){3}(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})`gm

그럼 이렇게 올바른 ip주소 하고만 일치하는 것을 볼 수 있습니다.

반응형

관련글 더보기

댓글 영역