Web Development/ETC

[ETC] 정규식 (Regex) 이해하기

devflate 2024. 4. 2. 07:38

 

회사 코드에서 정규식 코드를 볼 때마다, 공부 한번 해야지 하고 계속 넘어가고 있었다.

이번에야말로 정규식에 대해서 공부해보자라는 생각으로 정리해보았다.

드림 코딩 엘리의 정규식 영상을 보고, 그 안의 내용을 다 따라해보니, 정규식에 대해서 기본은 이해가 된 것 같다.

 

https://www.youtube.com/watch?v=t3M6toIflyQ

내가 다니는 회사에서 정규식은 아래와 같은 경우 사용한다.

  • 프론트엔드에서 라우트 경로에 따라 화면을 다르게 표현 해줘야 할 경우, 라우트 경로를 파악할 경우
  • 프론트엔드 및 서버에서 사용자 입력 내용을 validate 할 경우

정규식은 개발자 개인이 공부하지 않았다면 모르기에 모두가 코드를 쉽게 읽고 유지보수하기에 어렵다는 단점이 있지만, 일단 알기만하면, 길게 작성해야할 코드를 줄일 수 있어 효율적이라고 생각한다.

 

  1. 무엇?
    1. 일반 명사 형식 언어 이론을 바탕으로 하여 주어진 문자열의 집합을 정확하게 표현하기 위하여 사용되는 표현 규칙.
    2. 고유 명사 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어
  2. 왜 사용하는가?
    데이터 내에 특정 규칙을 가진 부분을 찾아내어 수정, 삭제, 일치여부 판단을 쉽게 하기 위해서
  3. 어떻게 사용하는가?
    • 정규식의 기본 포맷
      /regex?/i regex : 패턴 정의 i : 검색 옵션

    • 기본 규칙

      Groups and ranges

      Character
      () 그룹
      [] 문자셋, 괄호안의 어떤 문자든
      [^] 부정 문자셋, 괄호안의 어떤 문가 아닐때
      (?:) 찾지만 기억하지는 않음
      Boundary-type

      Character
      \b 단어 경계
      \B 단어 경계가 아님
      ^ 문장의 시작
      $ 문장의 끝
      Quantifiers  

      Character
      ? 없거나 있거나 (zero or one)
      * 없거나 있거나 많거나 (zero or more)
      + 하나 또는 많이 (one or more)
      {n} n번 반복
      {min,} 최소
      {min,max} 최소, 그리고 최대
      Character classes

      Character
      \ 특수 문자가 아닌 문자
      . 어떤 글자 (줄바꿈 문자 제외)
      \d digit 숫자
      \D digit 숫자 아님
      \w word 문자
      \W word 문자 아님
      \s space 공백
      \S space 공백 아님
  4. 사용 예시
1. 휴대폰 번호 찾기
\^0\d{1,2}[- .]\d{3}[- .]\d{4}\

2. 이메일 찾기
\[a-zA-Z0-0._+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.]+\

3. url 찾기
	3-1. 일반 url
		(https?:\/\/)?[A-Z0-9a-z.]+\/[A-Z0-9a-z-]+
	3-2. 특정 url
		(?:https?:\/\/)?(?:22www\.)?[youtu.be](http://youtu.be/)\/[A-Z0-9a-z-]{11}


Hi there, Nice to meet you. And Hello there and hi.
I love grey(gray) color not a gry, graay and graaay.
Ya ya YaYaYa Ya

abcdefghijklmnopqrstuvwxyz
ABSCEFGHIJKLMNOPQRSTUVWZYZ
1234567890

010-898-0893
010 898 0893
010.898.0893
010-405-3412
02-878-8888

dream.coder.ellie@gmail.com
hello@daum.net
hello@daum.co.kr

https://www.youtu.be/-ZClicWm0zM
https://youtu.be/-ZClicWm0zM
youtu.be/-ZClicWm0zM

 

 

<참고할 내용들>

  1. What are the benefits of using regex? 정규식 사용의 장점?One benefit of using regex is its ability to quickly parse through large amounts of data quickly and accurately looking for matches or selectively replacing parts with other values. While some languages have built-in support for regular expressions it's often versatile enough to work across different languages that may not have native support - making it applicable to almost any programming language imaginable! Additionally, Regular expressions tend to be easier to read than most traditional programming languages; giving developers a faster way to develop algorithms without having to write full programs every time something needs tweaking.
  2. 정규 표현식을 사용하는 한 가지 이점은 대량의 데이터를 빠르고 정확하게 파싱하여 일치하는 부분을 찾거나 다른 값으로 선택적으로 부분을 교체할 수 있는 능력입니다. 일부 언어는 정규 표현식에 대한 내장 지원을 가지고 있지만, 종종 네이티브 지원이 없는 다양한 언어에서도 사용할 수 있을 정도로 다재다능하여, 상상할 수 있는 거의 모든 프로그래밍 언어에 적용할 수 있습니다! 또한, 정규 표현식은 대부분의 전통적인 프로그래밍 언어보다 읽기 쉬워 개발자가 매번 전체 프로그램을 작성할 필요 없이 알고리즘을 더 빠르게 개발할 수 있는 방법을 제공합니다.
  3. 드림 코딩 엘리 유튜브 : https://www.youtube.com/watch?v=t3M6toIflyQ
  4. 정규식 퀴즈 풀어볼 수 있는 곳 : https://regexone.com/lesson/end?
  5. 포프님의 정규식 이제 그만 이라는 영상 : https://www.youtube.com/watch?v=CmcBPvsxcKU

<출처>

  1. https://www.lenovo.com/us/en/glossary/regex/?orgRef=https%3A%2F%2Fwww.google.com%2F
  2. https://www.youtube.com/watch?v=t3M6toIflyQ
  3. 네이버 사전