Regex

이수민·2022년 9월 3일
0

알면 좋은

목록 보기
1/1

Regex (정규 표현식)

Regex (Regular Expression; 정규표현식)

  • 텍스트를 검색할 때 Ctrl+F로 찾는 것을 조금 더 발전시킨 형태이다.
  • 글자 자체를 가지고 찾는 게 아니라 패턴을 이용해서 찾는다.
  • 사용 예시
    • 입력 유효성 체크(Form Validation): email 주소가 맞는지 등
    • 텍스트에서 특정 부분을 추출: 우편번호 추출 등
    • 특정 텍스트 바꾸기: 계란을 달걀로 바꾸기
    • 큰 텍스트를 작게 쪼개기: 콤마나 점으로 구분해서 문장 쪼개기

연습용 사이트: regexr.com/5mhou


문법 정리

Groups and ranges

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

Quantifiers

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

Boundary-type

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

Character classes

Character
\특수 문자가 아닌 문자
.모든 글자 (줄바꿈 문자 제외)
\ddigit 모든 숫자
\Ddigit 숫자 제외
\wword 모든 문자
\Wword 문자 제외
\sspace 모든 공백
\Sspace 공백 제외

참고영상


예제

/[a-z]/gm : a부터 z까지 지정

/[a-zA-Z0-9]/gm : a부터 z까지, A부터 Z까지, 0부터 9까지 지정

/[^a-zA-Z0-9]/gm : a부터 z까지, A부터 Z까지, 0부터 9까지를 제외한 것들 지정

/[/bHi]/gm : Hi중에서 단어 앞에서 쓰이는 Hi를 지정

/[Hi/b]/gm : Hi중에서 단어 뒤에 붙어쓰이는 Hi를 지정

/\[\]\{\}/gm : 특수문자인 경우, \를 앞에 붙여야 특수문자로 인식된다. 여기서는 []와 {}를 지정한다.


예제

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

abcdefghijklmnopqrstuvwxyz
ABSCEFGHIJKLMNOPQRSTUVWZYZ
1234567890

.[]{}()\^$|?*+

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

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

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

여기서 전화번호만 지정하고 싶다면

일단 010-111-2222와 같은 기본 형태를 지정해보자.

/\d\d\d-\d\d\d-\d\d\d\d/gm

여기서 바꿔보자.

/\d{2,3}[- .]\d{3}[- .]\d{4}/gm

\d{2,3} 처음에는 숫자가 2~3번 나와야하고
[- .] 중간에는 - 또는 공백 또는 . 이 나와야한다.
\d{3}그 다음에는 숫자가 3번 나와야하고
[- .] 또 중간에는 - 또는 공백 또는 . 이 나와야한다.
\d{4}마지막으로는 숫자가 4번 나와야한다.

여기서 이메일만 지정하고 싶다면

/[a-zA-Z0-9.]+@[a-zA-Z0-9]+\.[a-zA-Z0-9.]+/gm

유튭 링크에서 동영상 아이디만 지정하고 싶다면

# 과정1
/(https?:\/\/)?(www\.)?youtu.be\/([a-zA-Z0-9-]{11})/gm

https?:\/\/ https에서 s는 있어도 되고 없어도 되므로 뒤에 ?:를 붙인다.
(https?:\/\/)? https:// 이 부분 전체도 있어도 되고 없어도 되는 부분이므로 그룹으로 묶고 뒤에 ?를 붙인다.
(www\.)? www. 이 부분 전체도 있어도 되고 없어도 되므로 그룹으로 묶고 뒤에 ?를 붙인다.
youtu.be\/ 슬래쉬도 특수문자니까 앞에 \를 붙인다.
이제 동영상아이디 부분인데,
([a-zA-Z0-9-]{11}) 총 11개의 문자열로 이루어졌으므로 뒤에 {11}를 붙인다.

이렇게 우리는 총 3가지의 그룹을 만들었다.

  • http:// 부분
  • www. 부분
  • 동영상 아이디 부분

근데 우리는 동영상아이디만을 가져와야 한다.
따라서 필요없는 http부분과 www부분에 ?:를 붙여 캡처하지 않도록 지정하면 된다.

# 최종코드
/(?:https?:\/\/)?(?:www\.)?youtu.be\/([a-zA-Z0-9-]{11})/gm

0개의 댓글