-
Oracle 정규식알고리즘, SQL/SQL 2023. 11. 14. 12:02
개요
HackerRank에서 Weather Obervation Station12 문제를 풀고 있었다.
대충 해석해보니까 모음(a,e,i,o,u)로 시작하지도 끝나지도 않는 City들을 뽑으라는 것 같다.(중복되지 않도록)
그래서
SELECT DISTINCT city FROM station WHERE (city NOT LIKE 'A%' AND city NOT LIKE 'E%' AND city NOT LIKE 'I%' AND city NOT LIKE 'O%' AND city NOT LIKE 'U%') AND (city NOT LIKE '%a' AND city NOT LIKE '%e' AND city NOT LIKE '%i' AND city NOT LIKE '%o' AND city NOT LIKE '%u');
이런식으로 풀었다.
첫문자는 대문자로 시작하니 A,E,I,O,U 에다가 %를 붙여서 해당 문자로 시작하지 않으면서,
마지막 문자는 소문자로 끝나니까 %에다가 a,e,i,o,u를 붙여서 풀어줬다.
그런데 다른 사람들은 어떻게 풀었는지 보니까 정규표현식을 사용해서 간단하게 풀었다.
SELECT DISTINCT city FROM station WHERE REGEXP_LIKE(city,'^[AEIOU]') AND REGEXP_LIKE(city,'[aeiou]$');
에..? 단 4줄이요,,?
현타와서 정규표현식을 정리하기로 했다
Oracle 정규식(REGEXP)
오라클은 10g부터 정규식을 사용할 수 있도록 함수가 추가 됐다.
정규식을 사용하면 문자열을 패턴으로 찾거나 자를 수 있기 때문에 기존의 복잡하게 구현된 쿼리문을 정규식 함수를 사용해서 간단하게 처리할 수 있다.
기본 메타 문자
메타 문자 설명 . 임의의 한 문자 | OR과 동일 (왼쪽 또는 오른쪽과 일치) [...] 괄호 안의 리스트에 있는 임의의 단일 문자와 일치 [-] 문자 범위 (0-9, a-z, A-Z, 가-힝) [^] 해당 문자에 해당하지 않는 한 문자 \ 다음에 오는 문자를 이스케이프 (메타 문자를 일반 문자로) ^ 문자열의 시작과 일치 $ 문자열의 끝과 일치 정규식 함수
함수 설명 REGEXP_LIKE LIKE 연산과 유사/ 정규식 패턴을 검색. REGEXP_REPLACE 정규식 패턴을 검색하고 대체 문자열로 변경 REGEXP_INSTR 정규식 패턴을 검색하여 위치 반환 REGEXP_SUBSTR 정규식 패턴을 검색하여 부분 문자 추출 REGEXP_COUNT(v11g) 정규식 패턴을 검색하여 발견된 횟수를 반환 '알고리즘, SQL > SQL' 카테고리의 다른 글
HackerRank) Weather Observation Station 4 (1) 2023.11.12