카테고리 없음

예제를 통해 알아보는 정규식 작성 방법

사과만쥬 2024. 11. 6. 10:36

최근 모 은행 코테에서 sql 문제로 정규식 문제를 내서 화제가 되었다.

 

SELECT email
FROM your_table_name
WHERE email REGEXP '^[a-zA-Z0-9]+@[a-zA-Z]+\.com$';

 

자소설닷컴 복기본이라 100% 정확한 것은 아니다.

그리고 저거 못 맞춰도 다른 알고리즘에서 변별력을 준 것 같다. 저거 못 풀어도 면접 간다.

근데 또 sqlp 있는 사람도 저건 예상 못했다고 하는데... 좀 심한거 아닌가 ㅜ

 

 

언제 저런 괴랄한 문제가 또 나올수 있지 않을까 싶어 정리한다.

 

 


 

정규식이란?

프로그래밍에서 문자열을 다룰 때, 문자열의 일정한 패턴을 표현하는 일종의 형식 언어를 말한다. 정규 표현식이라고도 부르며, 보통 RegEx 혹은 RegExp라 많이 쓴다.

 

 

 

내가 쓴 정규식이 잘 쓴 정규식인지는 아래 사이트에서 테스트할 수 있다고 한다.

 

https://regexr.com/

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

 

 

우선 위의 예제를 기준으로 예제에 포함된 정규식에 쓰인 문자들을 먼저 알아보자.

 

 

^

문자열의 시작을 의미한다

 

 

[a-zA-Z0-9]+

알파벳 소문자, 대문자, 그리고 숫자로 이루어진 문자들이 한 번 이상(+) 나와야 하는 것을 의미한다.

 

 

@

문자 그대로 @ 기호가 있어야 함을 의미한다.

 

\.com

.com이 나와줘야 한다. 

 

 

$

문자열의 끝을 나타낸다. 이메일 주소가 .com으로 끝나야 함을 의미한다.

 

 

여기서 변형을 가해서, com 말고도 다른 도메인이 들어와도 되게 바꿔본다.

 

 

 

SELECT email
FROM your_table_name
WHERE email REGEXP '^[a-zA-Z0-9]+@[a-zA-Z]+\.[a-zA-Z]{2,}$';


[a-zA-Z]{2,}


알파벳으로 이루어진 문자열이 2자 이상 나와줘야 함을 의미한다.

 

이를 정규식에서는 수량자라고 정의한다. 아래와 같이 있다.

  • {n} : 정확히 n번 반복할 때 일치한다.
  • {n,} : n번 이상 반복할 때 일치한다.
  • {n,m} : n번에서 m번 안으로 반복할 때 일치한다.

 

 

이렇게 변형하면 .com이 아니더라도 다양한 도메인 확장자를 포함한 이메일 주소를 허용하게 된다.

기존에는 활용하지 못했던 example@domain.com, user123@site.org, test@company.co.kr와 같은 이메일 주소를 활용할 수 있게 된다.

 

 


유의사항

 

각 언어에서 지원하는 정규식 엔진은 그 구현이 제각각 다르기 때문에 항상 정규식을 검증한 다음 사용해야 한다.