정규식 함수 쿼리 해석(REGEXP_SUBSTR) 0 4 2,005

by 치즈케이크 [SQL Query] 정규식함수 REGEXPSUBSTR [2017.09.26 14:09:28]


<쿼리>

SELECT name,hpage,

         LTRIM(REGEXP_SUBSTR(hpage,'/([[:alnum:]]+\.?){3,4}?'),'/')

FROM professor

WHERE hpage IS NOT NULL;

<결과>

NAME              HPAGE                   URL

--------------------------------------------------------------

Audie Murphy    http://www.abc.net    www.abc.net
Angela Bassett    http://www.abc.net    www.abc.net
Jessica Lange    http://www.power.com    www.power.com
Michelle Pfeiffer    http://num1.naver.com    num1.naver.com

----------------------------------------------------------------------

예제 연습으로 다음과 같은 쿼리를 분석하는중에 

regexp_substr(hpage,'/([[:alnum:]]+\.?){3,4}?') 

이 함수에 의문이 생겼습니다. 

패턴 표현하는 부분인데요.

'/([[:alnum:]]+\.?){3,4}?'

여기서 \는 escape 문자로써 쓰이고 .(dot)을 위해 쓰인거지만 따로 기능이 없는지 없어도 잘 출력되더라구요. 

그리고 물음표문자는 *와 같은 기능을 한다고 알고있는데... 

굳이 저기서 \.? 와 {3,4}? 에 ?가 왜 쓰이는지 궁금합니다. 

.로 구분되는 패턴필드를 3개에서 4개 까지 출력하라는 것인데... ?가 굳이 없어도 잘 되서 의문이 생겼습니다.

regexp_substr(hpage,'/([[:alnum:]]+.?){3,4}?')

regexp_substr(hpage,'/([[:alnum:]]+.){3,4}')

둘 다 같은 결과!

 

by 우리집아찌 [2017.09.26 15:09:50]

REPLACE(HPAGE ,'http://' , '' ) 이 더 간단하지 않나요?


by 치즈케이크 [2017.09.28 15:31:26]

네 그렇긴한데 ㅠㅠ 정규식함수 연습중이다보니...ㅋㅋ 답변 감사합니다.


by 마농 [2017.09.27 14:25:56]

1. \ 는 정규식의 패턴 문자를 일반문자로 인식하게 합니다.
  - . 은 모든 문자를 나타내지만 \. 은 그냥 문자 . 을 의미합니다.
  - url 중간 중간 나타나는 . 을 표현하기 위해 \ 를 사용한거죠.
2. ? 는 있을 수도 있고 없을 수도 있다는 의미입니다.
  - ? : 0 ~ 1 개
  - * : 0 ~ n 개
  - + : 1 ~ n 개
  - {3,4} : 3 ~ 4 개
3. 전체 적인 느낌을 보면 적절한 사용법은 아닌 듯 합니다.
  - \. 에 ? 를 붙인 것은 맨 마지막에는 . 이 없기 때문이죠.
  - 하지만 이로 인해 앞에 . 이 붙은 것들도 이상하게 해석될 수 있습니다.
  - ? 때문에 . 이 없어도 되므로 [[:alnum:]]+ 에서 + 의 갯수가 (1 ~ n) 이므로
  - www. 를 하나의 묶음으로 볼수도 있고, w w w. 이렇게 3개로 볼수도 있죠.
  - 이는 다음에 오는 {3,4} 에도 영향을 주게 됩니다.
  - www. 뒤에 아무것도 없어도 w w w. 으로 해석된다면? {3,4}의 3번 반복을 만족하게 되죠.
  - 요구사항이 명확하게 정해져 있다면? 좀 더 나은 방법을 모색해 보세요.


by 치즈케이크 [2017.09.28 15:31:45]

항상 답변 너무 감사합니다. 너무 도움됩니다.!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입