πŸ’» Programming

μ •κ·œ ν‘œν˜„μ‹ (Regular Expression)

μ•ˆλ…•ν•˜μ„Έμš”, μΌ€μ΄μΉ˜μž…λ‹ˆλ‹€.

μ˜€λŠ˜μ€ μ •κ·œν‘œν˜„μ‹μ΄ 무엇인지 그리고 문법은 μ–΄λ–»κ²Œ 되며 μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λŠ”μ§€μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

μ •κ·œν‘œν˜„μ‹μ΄λž€?

- μ •κ·œν‘œν˜„μ‹(regular expression)μ΄λž€ 검색 νŒ¨ν„΄μ„ μ •μ˜ν•œ λ¬Έμžμ—΄μ΄λΌκ³  μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. regex λ˜λŠ” regexp둜 μ€„μ—¬μ„œ λ§ν•˜κΈ°λ„ ν•˜λ©° pattern이라고 ν•˜κΈ°λ„ ν•©λ‹ˆλ‹€. μ •κ·œν‘œν˜„μ‹μ€ 보톡 μž„μ˜μ˜ string λ‚΄μ—μ„œ νŠΉμ • νŒ¨ν„΄μ— μΌμΉ˜ν•˜λŠ” λ¬Έμžλ‚˜ λ¬Έμžμ—΄μ„ μ°Ύμ•„λ‚΄κ±°λ‚˜(find) μ°Ύμ•„μ„œ λ³€κ²½(find and replace)ν•  λ•Œ 맀우 μœ μš©ν•˜κ²Œ μ‚¬μš©λ©λ‹ˆλ‹€. 참고둜 μ •κ·œν‘œν˜„μ‹μ˜ κ°œλ…μ€ 1950λ…„λŒ€μ— 미ꡭ의 μˆ˜ν•™μž Stephen Cole Kleene에 μ˜ν•΄μ„œ μ‹œμž‘λ˜μ—ˆλ‹€κ³  ν•©λ‹ˆλ‹€. 

 

μ •κ·œν‘œν˜„μ‹μ˜ 기본문법

 

Boolean "or"

 | swim|swam λŠ” "swim" λ˜λŠ” "swam" κΈ€μžμ™€ λ§€μΉ­λ©λ‹ˆλ‹€

 

Grouping

μ†Œκ΄„ν˜Έλ₯Ό μ΄μš©ν•˜μ—¬ 그룹을 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Όλ“€μ–΄ sw(i|a)m νŒ¨ν„΄μ€ λ°”λ‘œ μœ„ μ˜ˆμ œμ™€ λ™μΌν•˜κ²Œ "swim"κ³Ό "swam" 단어와 λ§€μΉ­λ©λ‹ˆλ‹€.

 

μˆ˜λŸ‰(개수) νŒ¨ν„΄

 ?  : λ°”λ‘œ μ•žμ— μžˆλŠ” κΈ€μž λ˜λŠ” 그룹이 0~1개 쑴재

 *  : λ°”λ‘œ μ•žμ— μžˆλŠ” κΈ€μž λ˜λŠ” 그룹이 0개 이상 쑴재

 +  : λ°”λ‘œ μ•žμ— μžˆλŠ” κΈ€μž λ˜λŠ” 그룹이 1개 이상 쑴재

{n} : λ°”λ‘œ μ•žμ— μžˆλŠ” κΈ€μž λ˜λŠ” 그룹이 μ •ν™•νžˆ n번 쑴재

{min,} : λ°”λ‘œ μ•žμ— μžˆλŠ” κΈ€μž λ˜λŠ” 그룹이 μ΅œμ†Œ min 개 쑴재

{min,max} : λ°”λ‘œ μ•žμ— μžˆλŠ” κΈ€μž λ˜λŠ” 그룹이 μ΅œμ†Œ min 이상 μ΅œλŒ€ max μ΄ν•˜ 쑴재

 

μ™€μΌλ“œμΉ΄λ“œ (Wildcard)

 .  : μ™€μΌλ“œμΉ΄λ“œ λ¬ΈμžλŠ” 아무 캐릭터(any character)λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. κ·Έλƒ₯ μ–΄λ–€ κΈ€μžμ΄λ˜ νŠΉμˆ˜κΈ°ν˜ΈμΈμ§€ μ•ŒνŒŒλ²³μΈμ§€ μˆ«μžμΈμ§€μ— 관계없이 1개의 characterλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 즉, a.b νŒ¨ν„΄μ€ a와b 사이에 μ–΄λ–€ λ¬Έμžκ°€ 와도 λ§€μΉ­λ©λ‹ˆλ‹€. "acb", "a3b", "aAb" 등등이 λͺ¨λ‘ 맀칭되죠. 이 μ™€μΌλ“œμΉ΄λ“œ λ¬Έμžμ™€ μˆ˜λŸ‰μ„ λ‚˜νƒ€λ‚΄λŠ” *λ₯Ό ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ a.*b νŒ¨ν„΄μœΌλ‘œ 맀칭을 μ‹œλ„ν•˜λ©΄ "a123b", "ab", "aTTb" λ“±μ˜ λ¬Έμžμ—΄μ΄ λͺ¨λ‘ 맀칭이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 즉, a와 b 사이에 0개 μ΄μƒμ˜ λ¬Έμžκ°€ λ“€μ–΄μžˆλŠ” λ¬Έμžμ—΄μ΄ 맀칭이 λ©λ‹ˆλ‹€.

 

이외 κΈ°λ³Έ νŒ¨ν„΄

 ^  : λ¬Έμžμ—΄μ˜ μ‹œμž‘

 $  : λ¬Έμžμ—΄μ˜ 끝

[ ] : λŒ€κ΄„ν˜Έ λ‚΄μ˜ λ¬Έμžλ“€ 쀑 ν•˜λ‚˜μ˜ λ¬Έμžμ™€ 맀칭

[^ ] : λŒ€κ΄„ν˜Έ λ‚΄μ˜ λ¬Έμžλ“€μ„ ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” λ¬Έμžμ™€ 맀칭

 

Expression Flags

g : global

i : case insensitive

m : multiline

s : single line

u : unicode

y : sticky

 

μ •κ·œν‘œν˜„μ‹ νŒ¨ν„΄ 예제

μ •κ·œν‘œν˜„μ‹ νŒ¨ν„΄μ„€λͺ…μΌμΉ˜ λ¬Έμžμ—΄
^x- μ†Œλ¬Έμž x둜 μ‹œμž‘ν•˜λŠ” λ¬Έμžμ—΄"xyz song"
a$
- λ¬Έμžμ—΄ 끝에 κ³΅λ°±μ΄λ‚˜ μ€„λ°”κΏˆ λ¬Έμžκ°€ μžˆμ„κ²½μš° 맀칭 X
"blah bla"
a.c- μ†Œλ¬Έμž a와 c 사이에 ν•˜λ‚˜μ˜ λ¬Έμžκ°€ μžˆλŠ” λ¬Έμžμ—΄
"Javascript is easy"
a+- μ†Œλ¬Έμž aκ°€ 1번 이상 반볡됨

"I am a boy"
a*- μ†Œλ¬Έμž aκ°€ 0번 이상 반볡됨ba* -> "b", "ba", "baa"
a?- μ†Œλ¬Έμž aκ°€ 1번 μ‘΄μž¬ν•˜κ±°λ‚˜ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μΌ€μ΄μŠ€ 
a|b- μ†Œλ¬Έμž a λ˜λŠ” μ†Œλ¬Έμž b 
(a)- μ†Œλ¬Έμž aλ₯Ό κ·Έλ£Ήν™” 
(a)(b)- κ·Έλ£Ή1에 μ†Œλ¬Έμž a, κ·Έλ£Ή 2에 μ†Œλ¬Έμž b 맀칭 
a{n}- μ†Œλ¬Έμž aκ°€ n번 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄ 
a{min,}- μ†Œλ¬Έμž aκ°€ μ΅œμ†Œ min번 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄ 
a{min,max}- μ†Œλ¬Έμž aκ°€ μ΅œμ†Œ min번, μ΅œλŒ€ max번 λ°˜λ³΅λ˜λŠ” λ¬Έμžμ—΄ 
[ab]- μ†Œλ¬Έμž a λ˜λŠ” b"I am a boy"
[^ab]- μ†Œλ¬Έμž a와 bλ₯Ό μ œμ™Έν•œ λ‹€λ₯Έ 문자"cab"
[a-z]- μ†Œλ¬Έμž aλΆ€ν„° zμ‚¬μ΄μ˜ λ¬Έμžμ€‘ ν•˜λ‚˜ 
[^a-y]- μ†Œλ¬Έμž aλΆ€ν„° yκ°€ μ•„λ‹Œ λ‹€λ₯Έ 문자"abcz"
\^특수문자 ^λ₯Ό νŒ¨ν„΄λ‚΄μ— ν¬ν•¨μ‹œν‚¬ λ•Œ μ‚¬μš© 
\ddigit (숫자) 
\Dμˆ«μžκ°€ μ•„λ‹Œ 문자 
\s곡백문자 
\Sκ³΅λ°±λ¬Έμžκ°€ μ•„λ‹Œ 문자 
\ttab 문자 
\vvertical tab 문자 
\wμ•ŒνŒŒλ²³, 숫자, _ 문자 
\W(μ•ŒνŒŒλ²³, 숫자, _ 문자)κ°€ μ•„λ‹Œ 문자 

 

 

μ‹€μ œλ‘œ ν…ŒμŠ€νŠΈλ₯Ό 해보기 μœ„ν•΄μ„œλŠ” μ—¬λŸ¬ 온라인 μ‚¬μ΄νŠΈλ“€μ΄ μ‘΄μž¬ν•˜λŠ”λ°μš”, μ €λŠ” μ•„λž˜ μ‚¬μ΄νŠΈλ₯Ό μ• μš©ν•©λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈ λ¬Έμžμ—΄λ„ λ§ˆμŒλŒ€λ‘œ μž…λ ₯ν•΄λ³Ό 수 있고 νŒ¨ν„΄μ„ μž…λ ₯ν•˜λ©΄ μžλ™μœΌλ‘œ λ§€μΉ­λ˜λŠ” λ¬Έμžλ“€μ„ μ»¬λŸ¬λ§ν•΄μ€λ‹ˆλ‹€.

기본적인 ν…μŠ€νŠΈκ°€ μž…λ ₯λ˜μ–΄μžˆμ–΄μ„œ μ›ν•˜λŠ”λŒ€λ‘œ νŒ¨ν„΄μ„ μž…λ ₯해보고 κΈ°λŒ€ν•˜λ˜ 맀칭이 이루어 μ§€λŠ”μ§€ λ°”λ‘œλ°”λ‘œ 확인이 κ°€λŠ₯ν•©λ‹ˆλ‹€

https://regexr.com/

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

 

λ˜ν•œ, μ •κ·œμ‹μ΄ μ–΄λ–€ 의미λ₯Ό κ°–λŠ”μ§€ 도식화 ν•΄μ£ΌλŠ” μ‚¬μ΄νŠΈλ„ μžˆλŠ”λ°μš”, 여기도 μ΄μš©ν•΄λ³Όλ§Œ ν•©λ‹ˆλ‹€.

μž‘μ„±ν•œ μ •κ·œμ‹μ΄ μ •ν™•νžˆ μ–΄λ–€ 의미λ₯Ό κ°–λŠ”μ§€ μ‹€μ œ νŒ¨ν„΄ 맀칭 ν…ŒμŠ€νŠΈ λ§ŒμœΌλ‘œλŠ” 애맀할 λ•Œ μ΄μš©ν•˜λ©΄ μ’‹μŠ΅λ‹ˆλ‹€.

https://regexper.com/

 

Regexper

 

regexper.com

 

μ΄μƒμœΌλ‘œ μ •κ·œν‘œν˜„μ‹μ— λŒ€ν•΄μ„œ κ°„λž΅νžˆ λ‚΄μš©μ„ μ •λ¦¬ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.