๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TIL

์ •๊ทœ์‹

by bamDal 2022. 11. 11.

 

 

 

์ •๊ทœ์‹์ด๋ž€?
(Regular expressions, Regex, Regexp)

: ๋ฌธ์ž ํŒจํ„ด์„ ํ‘œํ˜„ํ•˜๋Š” ๊ณต์‹์œผ๋กœ, ์ผ์ข…์˜ ํ˜•์‹ ์–ธ์–ด.
: ํŠน์ • ๊ทœ์น™์ด ์žˆ๋Š” ๋ฌธ์ž์—ด ์ง‘ํ•ฉ์„ ์ถ”์ถœํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ•.


: ์ •๊ทœ์‹์€ JavaScript, Java, Oracle, Python, R, Perl, C, C# ๋“ฑ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

<์ •๊ทœ์‹ ์‚ฌ์šฉ ์˜ˆ์‹œ>

  • ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ( ํ•ธ๋“œํฐ ๋ฒˆํ˜ธ, ์ด๋ฉ”์ผ ํ˜•์‹, ์ฃผ์†Œ ํ˜•์‹, ์‹œ๊ฐ„๋ฌธ์ž์—ด ๋“ฑ)
  • ์›น ์Šคํฌ๋ž˜ํ•‘ (ํŠน์ • ํŒจํ„ด์œผ๋กœ ์ •๋ณด๋ฅผ ์Šคํฌ๋žฉ)
  • ๋ฌธ์ž์—ด ํŒŒ์‹ฑ(URL ์ฟผ๋ฆฌํŒŒ๋ผ๋ฏธํ„ฐ ํŒŒ์‹ฑ, ๊ด„ํ˜ธ ํŒŒ์‹ฑ ๋“ฑ) ๋ฐ ๋ฌธ์ž์—ด ๋Œ€์ฒด(๋Œ€์†Œ๋ฌธ์ž ๋ณ€๊ฒฝ ๋“ฑ)
  • ๋ฌธ๋ฒ• ํ•˜์ด๋ผ์ดํŒ…, ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ, ํŒจํ‚ท ์Šค๋‹ˆํ•‘ ๋“ฑ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๋Š” ์—ฌ๋Ÿฌ ์‘์šฉ๋กœ์ง์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

 

 

1. ๋ฉ”ํƒ€๋ฌธ์ž

๋ฉ”ํƒ€๋ฌธ์ž๋ž€ ๋ฌธ์ž๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์ž.

์ •๊ทœ์‹์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”ํƒ€๋ฌธ์ž   :       .   ^  $   *   +   ?   {}   []   \   |   ()

 

2. ์ •๊ทœ์‹ : ^ ๊ณผ $

1) ^Class                      Class ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ๋งค์นญ
2) branch$                     branch๋กœ ๋๋‚˜๋Š” ๋ฌธ์ž์—ด์„ ๋งค์นญ
3) ^Class branch$         Class branch์™€ ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ๋งค์นญ
4) name                         name์ด ๋“ค์–ด์žˆ๋Š” ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ๋งค์นญ

1) ^

 

2) $

 

3) ^classname$

3) ^์™€ $ ์‚ฌ์ด์˜ ๋ฌธ์ž์—ด๊ณผ ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ๋งค์นญ : ๊ณต๋ฐฑ๋„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ.

 

4)&nbsp; name

 

 

3. ์ •๊ทœ์‹ Quantifiers(์ˆ˜๋Ÿ‰์ž) : * , + , ? , {}

1) abc*     ab ์™€ 0๊ฐœ ์ด์ƒ์˜ c ๋ฅผ ํฌํ•จํ•œ ๋ฌธ์ž์—ด๊ณผ ๋งค์นญ
2) abc+    ab ์™€ 1๊ฐœ ์ด์ƒ์˜ c ๋ฅผ ํฌํ•จํ•œ ๋ฌธ์ž์—ด๊ณผ ๋งค์นญ
3) abc?    ab ์™€ 0๊ฐœ ๋˜๋Š” 1๊ฐœ์˜ c๋ฅผ ํฌํ•จํ•œ ๋ฌธ์ž์—ด๊ณผ ๋งค์นญ
4) abc{n}  ab ์™€ n๊ฐœ์˜ c๋ฅผ ํฌํ•จํ•œ ๋ฌธ์ž์—ด๊ณผ ๋งค์นญ
5) abc{n,} ab ์™€ n๊ฐœ ์ด์ƒ์˜ c๋ฅผ ํฌํ•จํ•œ ๋ฌธ์ž์—ด๊ณผ ๋งค์นญ
6) abc{2,5} ab ์™€ 2๊ฐœ ์ด์ƒ 5๊ฐœ ์ดํ•˜์˜ c๋ฅผ ํฌํ•จํ•œ ๋ฌธ์ž์—ด๊ณผ ๋งค์นญ
7) a(bc)*    a ์™€ 0๊ฐœ ์ด์ƒ์˜ bc๋ฅผ ํฌํ•จํ•œ ๋ฌธ์ž์—ด๊ณผ ๋งค์นญ
8) a(bc){2,5}  a์™€ 2๊ฐœ ์ด์ƒ 5๊ฐœ ์ดํ•˜์˜ bc๋ฅผ ํฌํ•จํ•œ ๋ฌธ์ž์—ด๊ณผ ๋งค์นญ

 

1) *์€ 0๊ฐœ ์ด์ƒ์ด๋ผ์„œ c๊ฐ€ ์—†๋Š” ab๋„ ๋งค์นญ๋จ

2) +๋Š” 1๊ฐœ ์ด์ƒ์ด๋ผ์„œ c๊ฐ€ ์—†๋Š” ab๋Š” ๋งค์นญ ์•ˆ๋จ

3) ?๋Š” 0๊ฐœ ๋˜๋Š” 1๊ฐœ์˜ c ์ด๊ธฐ ๋•Œ๋ฌธ์— abc์™€ ab๋Š” ๋งค์นญ, abcc๋Š” ๋งค์นญ ์•ˆ๋จ

4) c{2} ๋Š” ๋”ฑ 2๊ฐœ์˜ c๋ฅผ ํฌํ•จํ•œ ๋ฌธ์ž์—ด์„ ๋งค์นญ
c{3}์œผ๋กœ ํ•˜๋ฉด c๊ฐ€ 3๊ฐœ์ธ ๋ฌธ์ž์—ด์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋งค์นญ๋˜์ง€ ์•Š์Œ

7) a ์™€ 0๊ฐœ ์ด์ƒ์˜ bc ์ด๋ฏ€๋กœ
a๊ฐ€ ์—†๋Š” ๊ทธ๋ƒฅ bc๋Š” ๋งค์นญ๋˜์ง€ ์•Š์Œ

 

 

4. ์ •๊ทœ์‹ OR opreeator(์—ฐ์‚ฐ์ž) : | , []

1) a(b|c)         a ๊ทธ๋ฆฌ๊ณ  b ๋˜๋Š” c ๋ฅผ ํฌํ•จํ•œ ๋ฌธ์ž์—ด์„ ๋งค์นญ
2) a[bc]          a(b|c) ์™€ ๋™์ผ

 

 

5. ์ •๊ทœ์‹ Character classes : \d , \w, \s , .

1) \d      ์ˆซ์ž ํ•˜๋‚˜์™€ ๋งค์นญ(decimal)
2) \w      ๋ฌธ์ž(์ˆซ์ž, ์˜๋ฌธ, ์–ธ๋”๋ฐ”) ํ•˜๋‚˜์™€ ๋งค์นญ
3) \s       ๊ณต๋ฐฑ๋ฌธ์ž(ํƒญ, ์ค„๋ฐ”๊ฟˆ, ์ŠคํŽ˜์ด์Šค) ํ•˜๋‚˜์™€ ๋งค์นญ
4) .         ๋ชจ๋“  ๋ฌธ์ž ํ•˜๋‚˜์™€ ๋งค์นญ

 \w   ์™€  \s   ์™€   .   ์˜ ๋งค์นญ์„ ๋น„๊ต

 

5-1. ์ •๊ทœ์‹ : \D , \W, \S 

์œ„์˜ ์†Œ๋ฌธ์ž์™€ ๋ฐ˜๋Œ€์˜ ์˜๋ฏธ๋กœ ๋งค์นญ
\D      ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž์—ด ํ•˜๋‚˜์™€ ๋งค์นญ
\W     ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๊ณต๋ฐฑ ํ•˜๋‚˜์™€ ๋งค์นญ
\S      ๊ณต๋ฐฑ์ด ์•„๋‹Œ ์ˆซ์ž์™€ ๋ฌธ์ž ํ•˜๋‚˜์™€ ๋งค์นญ

์ˆซ์ž ์ œ์™ธ, ๋ฌธ์ž์™€ ๊ณต๋ฐฑ
๋ฌธ์ž์™€ ์ˆซ์ž ์ œ์™ธ, ๊ณต๋ฐฑ ๋งค์นญ
๊ณต๋ฐฑ ์ œ์™ธ, ๋ฌธ์ž์™€ ์ˆซ์ž

 

5-1. ์ •๊ทœ์‹ : ํŠน์ˆ˜๋ฌธ์ž, etc

ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ์—ญ์Šฌ๋ž˜์‹œ( \ )๋ฅผ ์•ž์— ๋ถ™์—ฌ ์‚ฌ์šฉ.
1) \^\d     ํŠน์ˆ˜๋ฌธ์ž ^ ์™€ ์ˆซ์ž ํ•˜๋‚˜๋ฅผ ๋งค์นญ
2) \t         ํƒญ๋ฌธ์ž
3) \n        ์ค„๋ฐ”๊ฟˆ๋ฌธ์ž
4) \r         ์บ๋ฆฌ์ง€๋ฆฌํ„ด๋ฌธ์ž

ํŠน์ˆ˜๋ฌธ์ž ^ ์™€ ์ˆซ์ž ํ•˜๋‚˜

 

* \r (์บ๋ฆฌ์ง€ ๋ฆฌํ„ด, carriage return)
: ์ปค์„œ๋ฅผ ํ•ด๋‹น ์ค„์˜ ๋งจ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ๋†“์Œ

 

6. ์ •๊ทœ์‹ Grouping : ()

1) a(bc)                () ์†Œ๊ด„ํ˜ธ๋Š” ์บก์ณ ๊ทธ๋ฃน์„ ์ƒ์„ฑ
2) a(?:bc)*            ?: ๋Š” ์บก์ณ ๊ทธ๋ฃน ์ƒ์„ฑ์„ ๋ฌด์‹œ
3) a(?<foo>bc)     ?<foo> ๋Š” ์บก์ณ ๊ทธ๋ฃน์— ์ด๋ฆ„์„ ์ง€์ •
  • ์—ฌ๋Ÿฌ ๊ทธ๋ฃน์œผ๋กœ ์บก์ณ๋œ ๊ฒฐ๊ณผ๋Š” ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜๋˜๋ฏ€๋กœ index๋กœ ์บก์ณ๋œ ๋‚ด์šฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋ฌธ์ž์—ด๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
  • ๊ทธ๋ฃน์— ์ด๋ฆ„์„ ์ง€์ •ํ•œ ๊ฒฝ์šฐ ๊ฐ’์„ key-value ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง„ dictionary ์ฒ˜๋Ÿผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

7. ์ •๊ทœ์‹ : []

1) [abc]          a ๋˜๋Š” b ๋˜๋Š” c๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฌธ์ž์—ด๊ณผ ๋งค์นญ
2) [a-c]            = [abc] = a|b|c
3) [0-9]%         0์ด์ƒ 9์ดํ•˜ ์ˆซ์ž ๊ทธ๋ฆฌ๊ณ  % ๋ฌธ์ž๋ฅผ ํฌํ•จํ•œ ๋ฌธ์ž์—ด๊ณผ ๋งค์นญ
4) [^a-zA-Z]    ์˜๋ฌธ์ด ์•„๋‹Œ ๋ฌธ์ž์™€ ๋งค์นญ. [] ์•ˆ์˜ ^๋Š” NOT์˜ ์˜๋ฏธ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
5) [a-fA-F0-9]

 

 

8. ์ •๊ทœ์‹ : ?

์ˆ˜๋Ÿ‰์ž (  *  +  {}  )์€ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ๋งค์นญ์‹œํ‚ค๋ ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

์ˆ˜๋Ÿ‰์ž ๋’ค์— ?  ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋Šฅํ•œ ์ ๊ฒŒ ๋งค์นญ์‹œํ‚ค๋Š” ํŠน์ง•์„ ๊ฐ–๋Š”๋‹ค.

< ์™€ > ์‚ฌ์ด์—  . (๋ชจ๋“  ๋ฌธ์ž) ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฌธ์ž๋ฅผ ๋งค์นญ

< ์™€ > ์‚ฌ์ด์— .(๋ชจ๋“  ๋ฌธ์ž) ํ•˜๋‚˜ ์ด์ƒ, ๊ฐ€๋Šฅํ•œ ์ ๊ฒŒ ๋งค์นญ

 

ํ•˜์ง€๋งŒ,

. ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์—„๊ฒฉํ•œ ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์€ ๋ฐฉ๋ฒ•.

< [^<>] +  >

 < [^<>]+  >   :  < ์™€ > ์‚ฌ์ด์—
< [^<>] >  :  <์™€> ๊ฐ€ ์•„๋‹Œ 1๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž

 

9. ์ •๊ทœ์‹ Boundaries : \b ์™€ \B

1) \b      ๋™์ผํ•œ ๋ฌธ์ž๋ฅผ ๋งค์นญ
2) \B     ํŒจํ„ด์ด ๋‹จ์–ด๋กœ ์™„์ „ํžˆ ๋‘˜๋Ÿฌ์‹ธ์ธ ๊ฒฝ์šฐ ๋งค์นญ.

anchor๋ฌธ์ž (^ , $)์™€ ์œ ์‚ฌํ•˜๋ฉฐ ํ•œ์ชฝ์€ ๋ฌธ์ž, ๋‹ค๋ฅธ์ชฝ์€ ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๋‹จ์–ด์™€ ๋งค์นญ.

 

\Babc\B ์™€ ๊ฒฐ๊ณผ ๋™์ผ.

 

10. ์ •๊ทœ์‹ : (?=) ์™€ (?<=)

1)  d(?=r)      r์ด ๋ฐ”๋กœ ๋’ค์— ์žˆ๋Š” d๋ฅผ ๋งค์นญ. (r์€ ํฌํ•จ๋˜์ง€ ์•Š์Œ)
2) (?<=r)d    r์ด ๋ฐ”๋กœ ์•ž์— ์žˆ๋Š” d๋ฅผ ๋งค์นญ. (r์€ ํฌํ•จ๋˜์ง€ ์•Š์Œ)
3) d(?!r)       r์ด ๋ฐ”๋กœ ๋’ค์— ์—†๋Š” d๋ฅผ ๋งค์นญ. (r์€ ํฌํ•จ๋˜์ง€ ์•Š์Œ)
4) (?<!r)d     r์ด ๋ฐ”๋กœ ์•ž์— ์—†๋Š” d๋ฅผ ๋งค์นญ. (r์€ ํฌํ•จ๋˜์ง€ ์•Š์Œ)

 

 

 

 

์ฐธ๊ณ  : [์ •๊ทœ์‹] ํ•ต์‹ฌ๋งŒ ๋ชจ์•„๋†“์€ Cheat Sheet ๋ธ”๋กœ๊ทธ

 

[์ •๊ทœ์‹] ํ•ต์‹ฌ๋งŒ ๋ชจ์•„๋†“์€ Cheat Sheet

์˜ˆ์ œ๋ฅผ ํ†ตํ•˜์—ฌ ์ •๊ทœ์‹์˜ ํ•ต์‹ฌ์ ์ธ ๋‚ด์šฉ๋งŒ ๊นŠ์ด์žˆ๊ฒŒ ์•Œ์•„๋ด…๋‹ˆ๋‹ค

chrisjune-13837.medium.com

์‹ค์Šต ์‚ฌ์ดํŠธ : regex101