정규식 문법 관련 질문 드립니다. 0 1 2,078

by 이우범 [Oracle 기초] 정규식 정규표현식 regexp_instr [2014.05.27 16:54:31]


안녕하세요, 정규식 공부하다가 명확하게 이해가 안되는 부분이 있어서 질문 드립니다.

 

SELECT
  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA', '[^ ]+', 1, 6) "REGEXP_INSTR"
FROM DUAL;

결과 값 - REGEXP_INSTR: 37

 

위 쿼리의 결과값은 37이 나오고, occurrence에 해당하는 6을 1로 바꾸면 결과값이 1, 2로 바꾸면 결과값이 5 가 출력됩니다.

 

제가 궁금한 부분은 [^ ]+ 인데요, ^은 [ ] 안에서 NOT의 의미로 사용되는 걸로 알고 있습니다. 그럼 공백이 아닌 것을 찾는건데요.. 뒤에 +를 붙여서 생각하니 어떤 조건을 매칭시켜 찾는것인지 이해가 잘 안됩니다. + 는 1회 이상 반복되는 것이고 a+b 가 ab, aab, aaab 등을 포함하고 b를 포함하지 않는다는 것 까지는 알고 있습니다.

 

혹시 [^ ]+ 부분을 좀 더 이해하기 쉽게 풀어서 설명 해주실 분 있으신가요..

by 비주류 [2014.05.27 17:08:01]

말씀하신 것처럼,

1자 이상의 "스페이스 문자가 아닌" 연속된 문자로 이루어진 단어 (스페이스를 만나면 종료)를 나타내는 표현식 이라고 하면 될 것 같습니다.

결국, 본문의 함수 목적은 스페이스(연속된 것은 1회로)가 5번(6-1=5) 나오고 "스페이스 문자가 아닌 문자"가 시작하는 위치를 얻어오는것이겠네요.

 

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