์๋ ํ์ธ์, ์ผ์ด์น์ ๋๋ค.
์ค๋์ ์ ๊ทํํ์์ด ๋ฌด์์ธ์ง ๊ทธ๋ฆฌ๊ณ ๋ฌธ๋ฒ์ ์ด๋ป๊ฒ ๋๋ฉฐ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
์ ๊ทํํ์์ด๋?
- ์ ๊ทํํ์(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" |
\^ | ํน์๋ฌธ์ ^๋ฅผ ํจํด๋ด์ ํฌํจ์ํฌ ๋ ์ฌ์ฉ | |
\d | digit (์ซ์) | |
\D | ์ซ์๊ฐ ์๋ ๋ฌธ์ | |
\s | ๊ณต๋ฐฑ๋ฌธ์ | |
\S | ๊ณต๋ฐฑ๋ฌธ์๊ฐ ์๋ ๋ฌธ์ | |
\t | tab ๋ฌธ์ | |
\v | vertical tab ๋ฌธ์ | |
\w | ์ํ๋ฒณ, ์ซ์, _ ๋ฌธ์ | |
\W | (์ํ๋ฒณ, ์ซ์, _ ๋ฌธ์)๊ฐ ์๋ ๋ฌธ์ |
์ค์ ๋ก ํ ์คํธ๋ฅผ ํด๋ณด๊ธฐ ์ํด์๋ ์ฌ๋ฌ ์จ๋ผ์ธ ์ฌ์ดํธ๋ค์ด ์กด์ฌํ๋๋ฐ์, ์ ๋ ์๋ ์ฌ์ดํธ๋ฅผ ์ ์ฉํฉ๋๋ค.
ํ ์คํธ ๋ฌธ์์ด๋ ๋ง์๋๋ก ์ ๋ ฅํด๋ณผ ์ ์๊ณ ํจํด์ ์ ๋ ฅํ๋ฉด ์๋์ผ๋ก ๋งค์นญ๋๋ ๋ฌธ์๋ค์ ์ปฌ๋ฌ๋งํด์ค๋๋ค.
๊ธฐ๋ณธ์ ์ธ ํ ์คํธ๊ฐ ์ ๋ ฅ๋์ด์์ด์ ์ํ๋๋๋ก ํจํด์ ์ ๋ ฅํด๋ณด๊ณ ๊ธฐ๋ํ๋ ๋งค์นญ์ด ์ด๋ฃจ์ด ์ง๋์ง ๋ฐ๋ก๋ฐ๋ก ํ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค
RegExr: Learn, Build, & Test RegEx
RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).
regexr.com
๋ํ, ์ ๊ท์์ด ์ด๋ค ์๋ฏธ๋ฅผ ๊ฐ๋์ง ๋์ํ ํด์ฃผ๋ ์ฌ์ดํธ๋ ์๋๋ฐ์, ์ฌ๊ธฐ๋ ์ด์ฉํด๋ณผ๋ง ํฉ๋๋ค.
์์ฑํ ์ ๊ท์์ด ์ ํํ ์ด๋ค ์๋ฏธ๋ฅผ ๊ฐ๋์ง ์ค์ ํจํด ๋งค์นญ ํ ์คํธ ๋ง์ผ๋ก๋ ์ ๋งคํ ๋ ์ด์ฉํ๋ฉด ์ข์ต๋๋ค.
Regexper
regexper.com
์ด์์ผ๋ก ์ ๊ทํํ์์ ๋ํด์ ๊ฐ๋ตํ ๋ด์ฉ์ ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
'๐ป Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[MySQL] json ์ปฌ๋ผ ์ ๋ฐ์ดํธ ์๋๋ ํ์ (0) | 2020.10.20 |
---|---|
Apache Kafka ์ด์ ํ (0) | 2020.09.10 |
Eclipse์ lombok ์ค์นํ๊ธฐ (0) | 2020.08.02 |
Eclipse Version M1 M2 M3 R RC SR Difference (0) | 2020.08.02 |
[Elasticsearch] Kibana์์ ์กฐํ์ x of y shards failed ์ค๋ฅ ๋ฐ์ (0) | 2020.06.29 |