📚문제
📝풀이
# Write your MySQL query statement below
# 내 제출 - 오답
SELECT *
FROM Users
WHERE SUBSTRING_INDEX(mail,'@',1) REGEXP '^[A-Za-z][A-Za-z0-9._-]+$'
AND SUBSTRING_INDEX(mail,'@',-1) = 'leetcode.com'
정규표현식으로 풀어야할 것 같아서
구글링하여 풀어봤다
근데 테스트 케이스까진 맞는데
제출에서 틀린다
답과 대조해봤는데 어디서 왜 틀린지가 안나온다..생략된듯
+ 그래도 mysql에서 split 기능을 하는
SUBSTRING_INDEX 함수를 배웠다
SUBSTRING_INDEX(col,'구분자',1)
해당 열을 지정하고(col)
문자열 내에서 어떤 구분자를 나눌 지 설정한 뒤('구분자')
나누어진 문자열들 중에서 몇번째 인덱스에 있는 것을 가져올 건지 설정
아래 예시 확인
만약 중간 문자열을 가져오고 싶다면 SUBSTRING_INDEX 함수로 한번 더 감싸줘야한다
SUBSTRING_INDEX(SUBSTRING_INDEX('하나-둘-셋' '-', -2), '-', 1)
아무튼 오답이기 때문에
조금 더 간단한 풀이 참고
📌최종 코드
# Write your MySQL query statement below
SELECT *
FROM Users
WHERE mail REGEXP '^[A-Za-z][A-Za-z0-9._-]*leetcode[.]com+$'
# WHERE mail REGEXP '^[A-Za-z][A-Za-z0-9._-]*leetcode\\.com+$'
코드설명
^[A-Za-Z] : ^는 문자열의 시작을 알리고 지정하지 않을경우 모든 문자열 . 여기서는 문자열(letter)로 시작해야한다는 의미
[A-Za-z0-9._-]* : *는 반복여부 표현. *앞의 문자가 0번 또는 그 이상 반복됨. 여기서는 문자열,숫자,._-만 나온다는 의미
leetcode[.]com+$ : $는 문자열의 끝을 표현 지정하지 않을 경우 모든 문자열. 여기서는 leetcode.com으로 끝난다는 의미
[]은 문자 클래스를 나타내며 해당 안에 문자열과 일치하는 경우
여기서 leetcode[.]com은 .(마침표)문자 하나와 그대로 일치하는 경우를 의미
+ : 반복여부 표현. *앞의 문자가 적어도 1번은 나와야함. 여기서 @leetcode.com은 반드시 나와야 하기때문에 *가 아닌 +
leetcode\\.com : 이스케이프 표현. .(마침표)를 문자 그대로 사용하기 위해서 \(역슬래시)기호 사용.
하지만 이때 \(역슬래시) 기호 또한 문자열로 봐야하므로 \(역슬래시) 기호 한 번 더 사용하여 총 2회 사용