7-1. 하위 표현식의 정의
https://thisisnew-storage.tistory.com/115
이전 글에서 특정 위치에서의 검색에 대해 다뤘습니다.
어떤 문자의 뒤에 더하기(+), 별표(*), 물음표(?) 등을 사용하면 그 문자의 반복 여부를 설정할 수 있었죠.
근데 여기서 중요한 사실은, 이 메타 문자들이 바로 앞 문자에만 적용된다는 점입니다.
아래의 예시처럼 반복되는 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 주소 기준으로 숫자 묶음들에 고려되어야 될 사항들은 다음과 같습니다.
이 사항들을 하위 표현식을 중첩하여 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주소 하고만 일치하는 것을 볼 수 있습니다.
[Programmers] Lv.2 피보나치 수 (Go) (0) | 2022.12.03 |
---|---|
[Programmers] Lv.2 k진수에서 소수 개수 구하기 (Go) (0) | 2022.12.02 |
[Programmers] Lv.2 괄호 회전하기 (Go) (0) | 2022.12.01 |
[Programmers] Lv.1 명예의 전당 (1) (Go) (0) | 2022.11.30 |
[Programmers] Lv.2 위장 (Go) (0) | 2022.11.29 |
댓글 영역