์•ˆ๋…•ํ•˜์„ธ์š”, ์ผ€์ด์น˜์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ ์ •๊ทœํ‘œํ˜„์‹์ด ๋ฌด์—‡์ธ์ง€ ๊ทธ๋ฆฌ๊ณ  ๋ฌธ๋ฒ•์€ ์–ด๋–ป๊ฒŒ ๋˜๋ฉฐ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ •๊ทœํ‘œํ˜„์‹์ด๋ž€?

- ์ •๊ทœํ‘œํ˜„์‹(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

 

์ด์ƒ์œผ๋กœ ์ •๊ทœํ‘œํ˜„์‹์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํžˆ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.