버튼 수집상

[CS] 정규표현식 Basic Regex 본문

TIL - CS

[CS] 정규표현식 Basic Regex

cocokaribou 2024. 1. 11. 13:53

매번 ChatGPT한테 물어보기가 귀찮아서 중요한 부분을 기억하기 위해 기록.

 

정규표현식 체크는 아래 사이트에서.

http://regexstorm.net/tester

 

.NET Regex Tester - Regex Storm

Home Tester Reference About

regexstorm.net

 

- raw string

python

print(r'abcedf\n')
# abcdef\n

kotlin

print("""abcdef\n""")
// abcdef\n

패턴값은 대부분 raw string으로 표현.

escape 문자열 때문.

 

 

- 키워드

"\" : 문자 리터럴 그대로 (ex: 점 \.)

"." 모든 문자

"\d" : 숫자 하나

"\D" : 숫자 아닌것

"\s" : 공백 하나

"\S" : 공백 아닌 것

"\w" : 문자 하나

"\W" : 문자 아닌것

"\b" : 한 단어

-> 이 부분에서 구글 search console의 크롤러가 계속 이스케이프 시퀀스 에러를 냈었다.

지금은 해결

 

[] : or 조건 자리

re.search(r'[abc]aron', 'aaron') 
# match 'aaron'

[a-z] : 범위 자리

re.search(r'[0-4]aa', '5aa')
# None

[^] : 조건 해당 안함

re.search(r'[^abc]', 'aaron')
# None

 

- 반복패턴

+: 1번 이상

*: 0번 이상
?: 있거나 없거나

{}: 반복 횟수 명시

{3}: 3번 반복

{1,3}: 최소 1번, 최대 3번

 

- 문자 위치

^~: 문자열의 맨 앞에서부터 일치하는 경우 검색

~$: 문자열의 맨 뒤에서부터 일치하는 경우 검색

re.search(r'^a', "ayo gg")
# match 'a'

re.search(r'g$', "ayo gg")
# match 'g'

re.search(r'^a.*g$', "ayo gg")
# match 'ayo gg'

-> 단어 기준이 아니라 문자열 기준이라 생각보다 쓸 데가 없을지도...?

 

- grouping ()

()로 묶는다

# 이메일 주소 정규표현식
re.search(r'(\w+)\@([^.]+(?:\.[^.]+)+)', "abcd@gmail.com")

# (\w+) : 한 자리 이상 글자 -> abcd
# \@ : 골뱅이 문자 리터럴
# [^.]+ : '.'아닌 한 자리 이상 글자 -> gmail
# (?:\.[^.]+)+) : '.'뒤에 이어지는 '.' 아닌 글자 (근데 하나 이상도 됨) -> .com

# 마지막 grouping 바깥에 +를 붙인 이유: 도메인이 길어질 수도 있기 때문
# 예시) test.mail@mail.co.uk

 

- 단어 포함

(cat | dog) : cat, dog 두 단어 중 하나 포함

re.search(r'((c\w*\b)|dog)', 'cat, dog, chat, kite')

# match 'cat', 'dog', 'chat'

# c\w* : c로 시작하는 한 글자 이상의 글자
# \b : 한 단어로 끊어줌
# ((c\w*\b)|dog) : c로 시작하는 단어 혹은 dog

 

- non-greedy matching

최소한으로 매칭시킴

input = '<html>haha</html>'

re.search(r'<.+>', input)
# match '<html>haha</html>'

re.search(r'<.+?>', input) 
# match '<html>'

자주 쓰는 정규표현식

"문자열"
(["'])(?:(?=(\\?))\2.)*?\1
혹은
(["']).*\1

JSON 문자열 키
"키값": (["'])(?:(?=(\\?))\2.)*?\1,

JSON 정수 키
"키값": ([0-9]+),

[대괄호]
\[[^\]]*\]|\[\.\.\]

00:00 (타임스탬프)
[0-9]{1,2}:[0-9]{1,2}

 

\1 : 첫번째 grouping을 가리킨다

 

 

728x90

'TIL - CS' 카테고리의 다른 글

[CS] mounting이란  (0) 2024.01.30
[CS] payload란  (0) 2023.07.13
[CS] heuristic이란  (0) 2023.07.11
[CS] predicate란  (0) 2023.06.26