정규표현식
언제 사용할까?
왜 사용할까?
유효성검사
사용자가 데이터를 조건에 맞게 입력했는지 등을 확인시 사용될수있다
ex)회원가입 시 아이디, 비밀번호 등의 조건을 정규표현식을 활용해서 만들수있다.
필요한 문자열추출하기 위해서 사용한다.
거의 모든 언어에서 지원된다(범용성이 높다)
단점은 무었일까?
정규표현식 사용방법1
- Flags global multline
- Character classes
- Anchors
- Excaped Characters
정규표현식 연습 사이트 https://regexr.com/
Character classes
.
모든문자들을 찾는다.
\w 알파벳,숫자,언더라인
\W 알파벳, 숫자, 언더라인 제외한 모든것
\d 숫자
\D 숫자를 제외한 모든것
\s 공백문자(띄어쓰기)
\S 공백이아닌것
[abc] a나b나c
[^abc] a,b,c가 아닌 모든 문자열
[a-g] a에서 g까지의 소문자영문자
[a-z] 소문자
[A-Z] 대문자
[가-힣] 모든 한글문자
[a-zA-Z] 모든 영문자
[a-zA-Z0-9] 모든 영문자 모든 숫자
Anchors
^abc 문장의 시작이 abc (문장안에 들어있는 단어가 아니라 문장이다)
abc$ 문장의 끝이 abc
^ => [ ]안에서 사용될때는 not, 괄호밖에서 사용될때는 start
\b단어 단어로 시작
단어\b 단어로 끝나는 것 찾는다.
\B단어 단어의 앞부분이 단어가 아닌 것들
단어\B 단어의 뒷부분이 단어가 아닌 것들
ex)
apple
appleappleapple
pineapple
\b apple => apple과 appleappleapple 과 apple
apple \b => apple과 pineapple 과 appleappleapple
\B apple => pineapple 과 appleappleapple
apple \B => appleappleapple
Excaped Characters
\. 마침표 문자 자체를 의미한다. 점만 찾고 싶을 경우
\* 별표를 찾고 싶을경우
\\ \ 역슬래쉬를 찾고 싶은경우
다른 특수문자를 포함하는 것도 \를 활용하면 찾을 수 있다.
\t
\n
\r
정규표현식 사용방법2
Quantifiers & Alternation
Groups & Lookaroud
Quantifiers
수량자 => 몇개가 들어갈것인가
문자+문자+문자+문자+문자 => 단어
a+p+p+l+e => 단어
ap*ple
ap+ple*
ap?ple
문자* 문자가 0개또는 여러개
문자+ 문자가 1개 또는 그 이상
문자? 문자가 0개 또는 1개
ex)
rait rabit rabbit rabbbit rabbbbit
rab*it b가 0개 또는 이상 rait rabit rabbit rabbbit rabbbbit
rab+it b가 1개 또는 이상 rabit rabbit rabbbit rabbbbit
rab?it b가 0개 또는 1개 rait rabit
중괄호이용
문자{숫자} 문자가 정확히 숫자만큼 있어야한다.
문자{숫자,} 문자가 숫자또는 그 이상 있는것을 찾는다.
문자{숫자,숫자} 문자가 숫자와 숫자 사이에 있는 것만 찾는다.
중괄호이용
rab{2}it b가 2개 rabbit
rab{2,}it b가 2개 또는 이상 rabbit rabbbit rabbbbit
rab{2,3}it brk 2~3사이 rabbit rabbbit
ex)
#좋아요, #좋아요반사, #팔로우, #맞팔,
#.+, #좋아요, #좋아요반사, #팔로우, #맞팔, 하나의 덩어리로 나온다
#을찾는다
.모든문자 + 문자가 하나또는 그이상
,
#과, 사이에 몇개의 문자가 오는지 모른다.
#.+?, 하면 #좋아요, #좋아요반사, #팔로우, #맞팔,
매치가 최소한으로 이루어지는 것으로 나누어서 나온다
#을찾는다
.모든문자, + 모든문자가 하나또는 그이상, 이에대해 ? 0개또는 1개
,
#.{2,3}?, #좋아요, #팔로우, #맞팔,
#을 찾는다.
. #뒤에 모든문자
{2,3} .에 대한 수량자 모든문자가 2개또는3개
? 매치가 최소한으로 이루워지게 한다.
(lazy 문자가 최소한으로 매치되는 것만 찾는다.)
Alternation
a|b a또는b 찾는다.
ex)gray grey
gr[ae]y gray grey
Character classes [ae] a나e
gr(a|e)y gray grey
(a|e)를 그룹으로 만들었다.
a 또는 e
Groups & Lookaroud
그룹
() 그룹
\1 역참조
특정부분만 뽑을경우 그룹을 짖는것 특정한 것만 그룹되서 나온다.
#.+?
역참조
(.+)\s\1 (.+)를 한번더 한다.
(?:abc) 그룹에서 빼고 싶을 경우 \[(?:특가할인|품절)].*
긍정전방탐색
(?=abc) 검색조건에는 포함되나 결과에는 포함되지 않는 .*(?=-레몬스토어)
부정전방탐색
(?!abc) .*(?=-(?!레몬).*스토어)