[MySQL] 정규표현식(REGEXP)

JJinu·2023년 1월 20일

프로그래머스 루시와 엘라 찾기를 풀던 도중

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME REGEXP 'Lucy|Ella|Pickle|Rogan|Sabrina|Mitty'
ORDER BY ANIMAL_ID ASC

로 풀어 제출하였지만 답은 같아도 틀렸습니다라는 결과가 나와 알아보던 중 REGEXP의 특징을 다시 알게 되었습니다.

이 문제가 틀린 이유는 정규표현식의 특징때문으로,

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME REGEXP 'ucy|Ella|Pickle|Rogan|Sabrina|Mitty'
ORDER BY ANIMAL_ID

만약 이 코드를 실행시켜보면 ucy여서 Lucy가 검색이 안될 것 같지만 잘 됩니다.
REGEXP는 문자열 내부에 어떤 부분이든 해당 정규식이 존재한다면 True 입니다.
따라서 i'm not Lucy 라는 이름을 가진 동물이 있다면 위의 식에서는 통과를 해 버리기 때문에 결과가 다르게 나왔던 것이었습니다.

따라서 일치하는 것을 찾는 정규표현식을 사용할 때에는

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE 
FROM ANIMAL_INS 
WHERE NAME regexp "^(Lucy|Ella|Pickle|Rogan|Sabrina|Mitty)$"
ORDER BY ANIMAL_ID

와 같이 시작과 끝역시 표시를 해주어야 정확한 결과가 도출됩니다.

profile
하루하루 의미있고 행복하게! (Yesterday is History, Tomorrow is a mystery, But today is a gift)

0개의 댓글