프로그래머스 문제를 풀다가 Regualr Expression ( 정규표현식) 함수를 알게 되었다.
문제 : 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기
REGEXP를 사용해 간결하게 코드를 짤 수 있는 장점이 있다.
함수 이름 | 설명 | 사용 예시 |
---|---|---|
REGEXP / RLIKE | 정규표현식과 일치하는지 확인 | SELECT * FROM users WHERE email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,}$'; |
REGEXP_ LIKE | 정규표현식 일치여부 Boolean 반환 | SELECT REGEXPLIKE(email, '^[A-Za-z0-9.%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,}$') AS is_valid FROM users; |
REGEXP_ REPLACE | 정규표현식과 일치부분을 대체 | SELECT REGEXP_REPLACE(phone_number, '[^0-9]', '') AS clean_phone FROM contacts; |
REGEXP_ SUBSTR | 정규표현식과 일치부분 추출 | SELECT REGEXP_SUBSTR(description, '[A-Za-z]+') AS first_word FROM products; |
REGEXP_ INSTR | 정규표현식 일치부분의 시작 위치 반환 | SELECT REGEXP_INSTR(email, '@') AS at_position FROM users; |
REGEXP_COUNT | 정규표현식 일치하는 패턴의 개수 | SELECT REGEXP_COUNT(description, 'engineer') AS engineer_count FROM jobs; |
REGEXP와 RLIKE는 동일한 기능을 제공하며, 문자열이 지정된 정규표현식과 일치하는지 여부를 확인하는 데 사용됩니다. 주로 WHERE 절에서 조건부 필터링에 사용됩니다.
-- 이메일 형식이 유효한 사용자 조회 SELECT email FROM users WHERE email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$';
REGEXP_LIKE는 REGEXP와 유사하게 문자열이 정규표현식과 일치하는지 여부를 반환하지만, 함수 형태로 사용됩니다.
-- 전화번호 형식이 유효한지 확인 SELECT phone_number FROM contacts WHERE REGEXP_LIKE(phone_number, '^\d{3}-\d{4}-\d{4}$');
REGEXP_REPLACE는 문자열 내에서 정규표현식과 일치하는 부분을 다른 문자열로 대체하는 함수
-- 전화번호에서 비숫자 문자 제거 SELECT REGEXP_REPLACE(phone_number, '[^0-9]', '') AS clean_phone FROM contacts;
REGEXP_SUBSTR는 문자열에서 정규표현식과 일치하는 부분 문자열을 추출하는 함수
-- 설명에서 첫 번째 단어 추출 SELECT REGEXP_SUBSTR(description, '[A-Za-z]+') AS first_word FROM products;
REGEXP_INSTR는 문자열 내에서 정규표현식과 일치하는 부분의 시작 위치를 반환하는 함수
-- 이메일에서 '@' 기호의 위치 찾기 SELECT REGEXP_INSTR(email, '@') AS at_position FROM users;
REGEXP_COUNT는 문자열에서 정규표현식과 일치하는 패턴의 개수를 세는 함수
-- 설명에서 'engineer'라는 단어의 개수 세기 SELECT REGEXP_COUNT(description, 'engineer') AS engineer_count FROM jobs;
사용자 테이블에서 'a'로 시작하는 이메일 주소를 가진 사용자를 조회하세요.
테이블 구조:
SELECT email FROM users WHERE email REGEXP '^a';
연락처 테이블에서 '(123)' 형식의 전화번호를 가진 연락처를 조회하세요.
테이블 구조:
SELECT phone_number FROM contacts WHERE phone_number REGEXP '^\\(123\\)';
사용자 테이블에서 'example.com' 도메인을 가진 이메일 주소를 조회하세요.
테이블 구조:
SELECT email FROM users WHERE email REGEXP '@example\\.com$';
주문 테이블에서 'YYYY-MM-DD' 형식의 날짜를 가진 주문을 조회하세요.
테이블 구조:
SELECT order_id, order_date FROM orders WHERE order_date REGEXP '^[0-9]{4}-[0-9]{2}-[0-9]{2}$';
제품 설명에서 모든 숫자를 '#' 문자로 대체하여 새로운 열로 표시하세요.
테이블 구조:
SELECT product_id, REGEXP_REPLACE(description, '[0-9]', '#') AS updated_description FROM products;
사용자 테이블에서 이메일 주소에서 '@' 이전의 사용자 이름만 추출하여 새로운 열로 표시하세요.
테이블 구조:
SELECT user_id, REGEXP_SUBSTR(email, '^[^@]+') AS username FROM users;
직원 테이블에서 이메일 주소의 도메인을 'newdomain.com'으로 변경하여 새로운 열로 표시
테이블 구조:
SELECT employee_id, email, REGEXP_REPLACE(email, '@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$', '@newdomain.com') AS updated_email FROM employees;
사용자 테이블에서 이메일 주소에서 '@' 이전의 사용자 이름만 추출하여 새로운 열로 표시하세요.
테이블 구조:
SELECT product_id, description, REGEXP_COUNT(description, 'eco') AS eco_count FROM products;
사용자 테이블에서 이메일 주소가 'example.com' 또는 'test.com' 도메인을 가진 사용자만 조회하세요.
테이블 구조:
SELECT user_id, email FROM users WHERE email REGEXP '(@example\\.com$|@test\\.com$)';