정규식에는 많은 규칙이 있지만... 실제로 사용해 보지 않으면 그 묘미를 확인하기가 어렵죠 지금부터는 정규식을 활용해서 실제로 해볼수 있는 여러가지 작업에 대해 소개해보도록 하겠습니다.
먼저 시작하기 전에
이사이트에서는 자신이 입력한 정규식에 대한 검증을 시각화로 도와주는 사이트 입니다. 혹시 자신이 작성한 정규식을 검증해 볼 필요가 있을때 유용하게 사용할 수 있는 사이트이니 참고해 주시고...
1. 핸드폰 번호
사람들이 많이 사용하는 핸드폰 번호는
형식이 010-1234-5678 이런식으로 숫자 3자리 - 4자리 - 4자리로 구성되어 있죠
이런 경우에는
1) /^\d{4}-\d{5}-\d{5}$/
2) /^010\-[0-9]{4}\-[0-9]{4}$/
2가지 경우로 표현할 수 있습니다.
첫번째는 10진수의 숫자 3개와 4개, 4개를 표현하는 것입니다. 물론 자유도가 다소 높죠
두번째는 앞에 010이라는 전재를 하고 각 자리수별로 가능한 범위를 지정합니다. 이때는 사용자에 따라서 특정 핸드폰을 구별해서 처리하고 싶을 때 가능한 방법입니다.
2. IP 주소
아이피주소는 간단하지만 예외가 많습니다
단순하게 ###.###.###.### 이렇게 생각하고 작성할 수 도 있습니다.
하지만 ##.##.###.## 이 경우도 있고 . 다시 말해 아까 전과는 달리 자릿수가 변동이 생길수가 있죠. 자릿수를 무조건 3자리로 정한다면 이야기는 달리지겠지만요...
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
정규식이 첫번째로 잡아낸 그룹은 실제로 매치된(captured)된 그룹이 아닙니다. 왜냐하면 ?: 가 그안에 위치하고 있기 때문입니다. ?:는 파서가 이 그룹을 잡아내지 않도록 합니다. 또한 이 잡히지 않는 그룹은 3번 반복되기를 원합니다.(그룹의 끝에 {3}) 이 그룹은 또다른 서브그룹과 점(.)을 담고 있고 파서는 점(.)이 뒤에 있는 서브그룹을 매치하려고 찾습니다.
서브그룹은 또다른 잡히지 않는(non-captured) 그룹입니다. 이것은 0~5가 뒤에 오는 "25"거나 0~4와 모든 숫자가 뒤에 오는 "2"이거나 옵션이 0 또는 2개의 숫자가 이어지는 숫자들의 문자셋의 묶음입니다.
이 3가지가 매치된 이후에 다음 캡쳐되지 않는 그룹으로 들어갑니다. 이것은 0~5가 이어지는 "25" 또는 0~4와 함께 오는 "2" 그리고 마지막에 다른 숫자(0이나 두자리 숫자)가 옵니다.
마지막 문자($)와 함께 이 복잡한 정규표현식이 끝납니다.
3. URL
URL을 보는 방법에대해 알아보겠습니다.
URL을 수식으로 한번 풀어 보면
http[s]://XXXX.XXX/XXX 이런식으로 할 수가 있겠죠
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w_\.-]*)*\/?$/
첫번째 그룹은 모두 옵션인데 이것은 URL이 "http://"나 "https://" 또는 둘다 없이 시작하도록 한다. s뒤에 물음표(?)는 URL이 http와 https를 모두 허용한다. 이 그룹전체를 선택사항으로 하기 위해서 뒤에 물음표(?)를 추가했습니다.
다음은 도메인명으로 한개이상의 숫자, 문자열, 점(.), 하이픈(-)뒤에 또다른 점(.)이 오고 그 뒤에 2~6개의 문자와 점이 옵니다. 이어지는 부분을 추가적인 파일과 디텍토리에 대한 부분으로 이 그룹에서는 갯수에 관계없이 슬래쉬(/), 문자, 숫자, 언더스코어(_), 스페이스, 점(.), 하이픈(-)이 나올 수 있으며 이 그룹은 많은 수의 디렉토리와 파일과 매치됩니다. 물음표(?)대신 별표(*)를 사용한 것은 별표는 0 또는 1이 아닌 0 또는 1개이상을 의미하기 때문입니다. 만약 물음표(?)를 사용했다면 오직 한개의 파일/디렉토리만 매치될 수 있었을 것입니다.
그 뒤에 슬래시(/) 매치되지만 이것은 선택사항이며 마지막으로 문자열의 끝($)이 나타납니다.
'리눅스 쉘 스크립트' 카테고리의 다른 글
쉘 스크립트 - AWK 사용법 (0) | 2017.12.24 |
---|---|
GREP 사용방법 - 옵션, 정규표현식 (0) | 2017.12.17 |
쉘 스크립트 - 문자열 : 정규표현식- 개요와 메타문자 (1) (0) | 2017.11.19 |
쉘 스크립트 - 문자열 (기초편) : cut, grep, awk (0) | 2017.11.15 |
쉘 스크립트 - 함수 (2) : 백그라운드 & 멀티스레드 (0) | 2017.11.10 |