반응형

정규식에는 많은 규칙이 있지만... 실제로 사용해 보지 않으면 그 묘미를 확인하기가 어렵죠 지금부터는 정규식을 활용해서 실제로 해볼수 있는 여러가지 작업에 대해 소개해보도록 하겠습니다.

 

먼저 시작하기 전에

https://regexper.com/

 

이사이트에서는 자신이 입력한 정규식에 대한 검증을 시각화로 도와주는 사이트 입니다. 혹시 자신이 작성한 정규식을 검증해 볼 필요가 있을때 유용하게 사용할 수 있는 사이트이니 참고해 주시고...

 

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개이상을 의미하기 때문입니다. 만약 물음표(?)를 사용했다면 오직 한개의 파일/디렉토리만 매치될 수 있었을 것입니다.

그 뒤에 슬래시(/) 매치되지만 이것은 선택사항이며 마지막으로 문자열의 끝($)이 나타납니다.

 

 

 

반응형

+ Recent posts