반응형
정규표현식(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) | "a b 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 |