본문 바로가기

IT/etc

정규표현식 (Regular Expressions)

반응형

정규표현식(regular expressions) 이란 ?

정규 표현식(regular expression)은 문자열에서 특정한 규칙을 가지는 문자열의 집합을 찾아내기 위한 검색 패턴

 

정규표현식 패턴

Anchors & Escape

구분 대상 내용 패턴 예시 참고
Anchor ^abc 문자열의 시작을 표현하며 x 문자로 시작됨을 의미 ^\d{3} "901" in "901-333-" LINK
Anchor abc$ 문자열의 종료를 표현하며 x 문자로 종료됨을 의미 -\d{3}$ "-333" in "-901-333" 위와 동일
escape \ regex에서 특수한 용도로 사용하는 문자를 일반 특수 문자로 처리

regex 사용 특수 용도 문자 :
. $ ^ { [ ( | ) * + ? \
\d+[+-x*]\d+ "2+2" and "3*9" in "(2+2) * 3*9" LINK

 

Meta Chacracters

정규 표현식에서 사용되는 기호를 Meta 문자라고 표현

대상 내용 패턴 예시 참고
. 임의의 한 문자를 표현 a.e "ave" in "nave"

"ate" in "water"
LINK1
LINK2
a|b or 표현으로 a 또는 b를 의미 a|e "a", "e" in "abcdefg"  
\w 임의의 한 word 문자를 표현
[a-zA-Z_0-9] 와 동일
\w "I", "D", "A", "1", "3" in "ID A1.3"  
\W 임의의 word가 아닌 한 문자를 표현
[^a-zA-Z_0-9] 와 동일
\W " ", "." in "ID A1.3"  
\s 공백 문자를 표현 \w\s "D " in "ID A1.3"  
\S 공백 문자가 아닌 한 문자를 표현 \s\S " _" in "int __ctr"  
\d 임의의 한 숫자 문자를 표현
[0-9] 와 동일
\d "4" in "4 = IV"  
\D 숫자 문자가 아닌 한 문자를 표 \D " ", "=", " ", "I", "V" in "4 = IV"  
\n new line 문자를 표현      
\t tab 문자를 표현      
\r carrige return 문자를 표현      
\0 null 문자를 표현      

 

Character Classes

대상 내용 패턴 예시 참고
[ character_group ] 문자 선택을 표현, [ ] 안에 있는 a,b,c 문자 중 하나를 의미 [ae]

"a" in "gray"

"a", "e" in "lane"
LINK1
LINK2
[^ character_group ] [ ] 안에 ^ carrot은 not을 의미하여 a,b,c를 제외한 문자를 의미 [^aei] "r", "g", "n" in "reign" LINK
[ first - last ] 문자 선택을 표현, [ ] 안에 - 를 사용해 range를 표현할 수 있음 [A-Z] "A", "B" in "AB123" LINK1
LINK2

 

Quantifiers

Greedy vs. lazy matching 참고

대상 내용 패턴 예시 참고
a* 반복을 표현하며, 0번 또는 그 이상 반복됨을 의미 a.*c "abcbc" in "abcbc" LINK1
LINK2
a+ 반복을 표현하며, 1번 또는 그 이상 반복됨을 의미 "be+" "bee" in "been", "be" in "bent" LINK1
LINK2
a? 반복을 표현하며, 0번 또는 1번 반복됨을 의미 "rai?" "rai" in "rain" LINK1
LINK2
a{m} 반복을 표현하며, a 문자가 m번 반복됨을 의미 ",\d{3}" ",043" in "1,043.6",
",876", ",543", and ",210" in "9,876,543,210"
LINK1
LINK2
a{m,} 반복을 표현하며, a 문자가 m번 이상 반복됨을 의미 "\d{2,}" "166", "29", "1930" LINK1
LINK2
a{m,n} 반복을 표현하며, a 문자가 m번 이상 n번 이하로 반복됨을 의미 "\d{3,5}" "166", "17668"

"19302" in "193024"
LINK1
LINK2
a*? * 수량자와 동일하지만 가능한 적은 범위로 매칭 a.*?c "abc" in "abcbc" LINK
a+? + 수량자와 동일하지만 가능한 적은 범위로 매칭 "be+?" "be" in "been", "be" in "bent" LINK
a?? ? 수량자와 동일하지만 가능한 적은 범위로 매칭 "rai??" "ra" in "rain" LINK
a{m,}? {m,} 수량자와 동일하지만 가능한 적은 범위로 매칭 "\d{2,}?" "166", "29", "1930"  
a{m,n}? {m,n} 수량자와 동일하지만 가능한 적은 범위로 매칭 "\d{3,5}?" "166", "17668"

"193", "024" in "193024"
 

 

Grouping

대상 내용
(x) 그룹을 표현하며 x를 그룹으로 처리함을 의미
(x)(y) 그룹들의 집합을 표현하며 앞에서 부터 순서대로 번호를 부여하여 관리하고 x, y 는 각 그룹의 데이터로 관리
(x)(?:y) ?:는 그룹들의 집합에 대한 예외를 표현하며 그룹 집합으로 관리되지 않음을 의미

 

Lookarounds

대상 내용 패턴 예시
A(?=B) 뒤에 B가 붙는 A를 찾음 a(?=c) "ab ac ad"
A(?!B) 뒤에 B가 붙지않는 A를 찾음 a(?!c) "ab ac ad"`
(?<=B)A 앞에 B가 붙는 A를 찾음 (?<=c)a "ba ca da"
(?<!B)A 앞에 B가 붙지않는 A를 찾음 (?<!c)a "ba ca da"

 

Flags

Flag 의미
g Global 의 표현하며 대상 문자열내에 모든 패턴들을 검색하는 것을 의미
i Ignore case 를 표현하며 대상 문자열에 대해서 대/소문자를 식별하지 않는 것을 의미
m Multi line을 표현하며 대상 문자열이 다중 라인의 문자열인 경우에도 검색하는 것을 의미

 

사용 예시

전화번호
^\d{3}-\d{3,4}-\d{4}$

IPv4
^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$

E-mail
^[a-zA-Z0-9]+@[0-9a-zA-Z]+\.[a-z]+$
^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}+$    // 언더바(_), 하이픈(-) 포함 및 길이 지정

날짜
^[\d]{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$         // YYYY-MM-DD
^[\d]{4}]\/(0[1-9]|1[012])\/(0[1-9]|[12][0-9]|3[01])$      // YYYY/MM/DD
반응형

'IT > etc' 카테고리의 다른 글

scale-up, scale-out  (0) 2025.02.26
직렬화, 역직렬화 (Serialization & Deserialization)  (0) 2025.02.26
[DataFormat] YAML  (0) 2025.02.25
[DataFormat] XML  (0) 2025.02.25
[DataFormat] JSON  (0) 2025.02.25