๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ํน์ ํ
์คํธ๋ง ๊ณจ๋ผ๋ด๊ฑฐ๋ ๊ตฌ๋ถํด์ผ ํ๋ ์๊ฐ์ด ์ฐพ์์จ๋ค. ์ด๋ ๊ฐ์ฅ ๋น ๋ฅด๊ณ ๊ฐ๋ฒผ์ฐ๋ฉฐ ์ด๋์๋ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ์ ๊ทํํ์(Regular Expression, regex)์ด๋ค.
์ ๊ทํํ์์ ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํจํด์ ์๋ฏธ๋ฅผ ๋ฐ๊พธ๋ ๋ฉํ๋ฌธ์์ ๋ํด ์ดํดํ๋ ๊ฒ์ด ์ค์ํ๋ค. ๋ฉํ๋ฌธ์๋ ์ผ๋ฐ ๋ฌธ์์ ๋ฌ๋ฆฌ ํน๋ณํ ๋์์ ์ํํด ํ
์คํธ๋ฅผ ๋ ์ ํํ๊ณ ์งง๊ฒ ์ฐพ๊ณ ๊ฒ์ฆํ๊ณ ์นํํ๊ณ ์ถ์ถํ ์ ์๊ฒ ํ๋ค.
์ ๊ท์์ "ํ ํฐ + ๊ท์น"์ ์กฐํฉ์ด๋ค. ๋ฌธ์๋ฅผ ์ค์ ๋ก ์๋นํ๋ ํ ํฐ(๋ฆฌํฐ๋ด, ๋ฌธ์ ํด๋์ค, ์ถ์ฝ ํด๋์ค, ๊ทธ๋ฃน ๋ฑ)๊ณผ ์ฐ์ฐ์(์๋์, ๋ถ๊ธฐ) ๊ทธ๋ฆฌ๊ณ ๋ฌธ์๋ฅผ ์๋นํ์ง ์๋ ์ ๋กํญ ์ฃผ์ฅ(์ต์ปค, ๊ฒฝ๊ณ, ํ์)์ ์กฐํฉํ๋ค.
๋ฉํ๋ฌธ์๋ ์ด ํ ํฐ, ์ฐ์ฐ์, ์ฃผ์ฅ์ ํน์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๊ฑฐ๋ ์์ ํ๋ ๊ธฐํธ์ ์ด์นญ์ด๋ค.
1) . - ๊ฐํ์ ์ ์ธํ ์์์ ๊ธ์ 1๊ฐ
. (dot)์ ์ค๋ฐ๊ฟ ๋ฌธ์๋ฅผ ์ ์ธํ๊ณ ์ด๋ค ๊ธ์๋ 1๊ฐ๋ฅผ ์๋ฏธํ๋ค.
a.b โ โacbโ, โa bโ, โaํbโ, โa_bโ ๋ฑ์ด ํฌํจ๋๋ค.
2) [ ] - ๋ฌธ์ ํด๋์ค (ํ๋ณด ์ค 1๊ธ์)
[โฆ] ์์ ํ์ฉํ ๋ฌธ์๋ค์ ์งํฉ์ ์ ๊ณ ๊ฐ ๊ธ์๋ฅผ ๋งค์นญํ๋ค.
[abc] โ a ๋๋ b ๋๋ c
[0-9] โ 0~9
[^โฆ] ์ฒ๋ผ ๋งจ ์์ ^๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ์ ์ ์๋ฏธํ๋ค.
[^0-9] โ ์ซ์๊ฐ ์๋ 1๊ธ์
3) - - ํ์ดํ(๋ฒ์)
๋ฌธ์ ํด๋์ค [โฆ] ์์์ ๋ฒ์๋ฅผ ์๋ฏธํ๋ค.
[A-Z] โ A๋ถํฐ Z๊น์ง
[0-9] โ ์ซ์ 0~9
ํด๋์ค ์์์ ๋งจ ์/๋ค์ ๋๋ ๊ฒฝ์ฐ ๋ฆฌํฐ๋ด๋ก ์ทจ๊ธ๋๊ธฐ ๋๋ฌธ์ ์ฃผ์
4) | - ๋๋/๋ถ๊ธฐ
a|b ๋ a ๋๋ b ๋ฅผ ๋ปํ๋ค. ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋ฎ๊ธฐ ๋๋ฌธ์ ๊ดํธ๋ก ๋ฌถ์ง ์์ผ๋ฉด ์ข์ฐ ์ ์ฒด๋ฅผ ๋๋๋ค.
ab|cd = (ab)|(cd)
a|bc = (a)|(bc)
ํ๊ฐ ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์งํ๋๋ค. ํ์ฌ ์์ ์์น์์ ์ผ์ชฝ ๋์๋ถํฐ ์๋ํ๊ณ ๊ทธ ๋์์ด ์ ์ฒด ํจํด์ ๋ง์กฑํ๋ฉด ๊ฑฐ๊ธฐ์ ํ์ ๋๋ค.
์
๋ ฅ: caterer
ํจํด: (cat|cater)er
๋์: cat๋์์ ๋จผ์ ์ฌ์ฉํ์ฌ cat + er = cater๋ก ์ด๋ฏธ ํจํด์ด ์ฑ๊ณตํ๋ฉด ๋ ๊ธด cater ๋์์ ์๋ํ์ง ์๊ณ ๋๋๋ค.
๋ฐ๋ผ์ ๊ฒน์น๋ ๋์์ด ์๋ค๋ฉด ๊ธด ๊ฒ ํน์ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ์์ ๋๋ ๊ฒ์ด ์ข๋ค.
5) \ - ์ด์ค์ผ์ดํ & ์ฝ์ด ํด๋์ค
\ ๋ ๋ ๊ฐ์ง ์๋ฏธ๋ก ์ฌ์ฉ๋๋๋ฐ ์ฒซ ๋ฒ์งธ๋ ๋ฉํ๋ฌธ์๋ฅผ ๋ฌธ์ ์์ฒด(๋ฆฌํฐ๋ด)๋ก ์ฌ์ฉํด์ผ ํ ๋ ์ด์ค์ผ์ดํ ํ๋ค.
pyomin\.com โ ์ค์ ์ (.)
file\(name\)\.txt
๋ ๋ฒ์งธ๋ ์ฝ์ด ํด๋์ค(์์ฃผ ์ฐ๋ ์งํฉ)๋ฅผ ํํํ ๋ ์ฌ์ฉ๋๋ค.
\d โ ์ซ์ [0-9]
\w โ ๋จ์ด๋ฌธ์ [A-Za-z0-9_]
\s โ ๊ณต๋ฐฑ๋ฅ(์คํ์ด์ค, ํญ \t, ๊ฐํ \n ๋ฑ)
\b โ ๋จ์ด ๊ฒฝ๊ณ(์ ๋กํญ)
\p โ ์ ๋์ฝ๋ ์์ฑ ์ด์ค์ผ์ดํ
๋๋ฌธ์๋ ๋ฐ๋ ์งํฉ์ ์๋ฏธํ๋ฉฐ(\D, \W, \S) \B๋ ๊ฒฝ๊ณ์ ๋ถ์ ์ ์๋ฏธํ๋ค.
\s๋ฅผ ์ ์ธํ ๋๋จธ์ง๋ ASCII ํ์ ์ด๊ธฐ ๋๋ฌธ์ ํ๊ธ/์ ๊ฐ ์ซ์ ๋ฑ์ ํฌํจ๋์ง ์๋๋ค.
6) {m,n} - ์๋์ (๋ฐ๋ณต ๊ฐ์)
๋ฐ๋ก ์ ํ ํฐ์ m~nํ ๋ฐ๋ณตํ๋ค.
\d{3} โ ์ซ์ ์ ํํ 3๊ฐ
\d{3,} โ ์ซ์ 3๊ฐ ์ด์
\d{2,4} โ ์ซ์ 2~4๊ฐ
์์ฃผ ์ฐ์ด๋ ์๋์๋ ์ถ์ฝํ์ด ์กด์ฌํ๋ค.
{0,1} โ ?
{0,} โ *
{1,} โ +
์๋์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์(greedy)์ด๋ค. ๊ฐ๋ฅํ ๋ง์ด ์๋นํ๋ ค ํ์ง๋ง ์ ์ฒด ์ ๊ท์์ด ๋งค์นญ๋๋๋ก ํ์ํ ๋งํผ์ ๋ค์ ๋ด์ด์ค๋ค. ํ์ง๋ง ์๋์ ๋ค์ ?๋ฅผ ๋ถ์ด๋ฉด ๊ฒ์ผ๋ฆ(lazy)์ด ๋๋ค. ๊ฐ๋ฅํ ์ ๊ฒ ์๋นํ๋ ๋งค์นญ์ ๋ง๋ค๊ธฐ ์ํด ํ์ํ๋ฉด ์ ์ ๋ ๋จน๋๋ค.
๋๋ถ๋ถ์ ์์ง์ ์ข์ธก๋ถํฐ ๊ฐ์ฅ ์ด๋ฅธ ์์ ์์น๋ฅผ ๋จผ์ ๊ณ ๋ฅด๊ณ ๊ทธ ์ ํ ์์์ ํ์/๊ฒ์ผ๋ฆ ๊ท์น๋๋ก ์๋น๋์ ์กฐ์ ํ๋ค.
์๋ฅผ ๋ค์ด a1234b๋ผ๋ ๋ฌธ์์ด์ด ์์ ๋
ํจํด1: /a\d{2,4}b/ (ํ์)
a ๋งค์นญ โ \d{2,4} ๊ฐ์ฅ ๋ง์ด(4๊ฐ) ๋จน์ด ๋ณด๊ธฐ โ 1234 โ ๋จ์ b๊ฒ์ฌ โ ์กด์ฌ โ ์ ์ฒด ๋งค์นญ ์ฑ๊ณต โ ๊ฒฐ๊ณผ: a1234b
ํจํด2: /a\d{2,4}?b/ (๊ฒ์ผ๋ฆ)
a ๋งค์นญ โ \d{2,4} ์ต์(2๊ฐ) ๋จน์ด ๋ณด๊ธฐ โ 12 โ b ๊ฒ์ฌ (๋ค์ ๋ฌธ์๊ฐ 3์ด๋ผ ์คํจ) โ ๋ฐฑํธ๋ํน์ผ๋ก ์ซ์ ํ๋ ๋(3) ๋จน์ โ b ๊ฒ์ฌ (๋ค์ ๋ฌธ์๊ฐ 4๋ผ์ ์คํจ) โ ์ซ์ ํ๋ ๋(4) ๋จน์ โ b ๊ฒ์ฌ โ ์ฑ๊ณต โ ๊ฒฐ๊ณผ: a1234b
์ ๋ฆฌํ๋ฉด ํ์์ ๋ง์ด โ ํ์ํ๋ฉด ์ค์ด๊ธฐ, ๊ฒ์ผ๋ฆ์ ์ ๊ฒ โ ํ์ํ๋ฉด ๋๋ฆฌ๊ธฐ๋ก ๋ฐฑํธ๋ํน์ ํตํด ์ ์ฒด ํจํด์ด ๋ง๋๋ก ์๋น๋์ ์กฐ์ ํ๋ค.
7) ^ $ - ์์/๋ ์ต์ปค
^๋ ๋ฌธ์์ด(๋๋ ์ค)์ ์์์ ์๋ฏธํ๊ณ $๋ ๋์ ์๋ฏธํ๋ค.
^\d+$ โ ์ฒ์๋ถํฐ ๋๊น์ง ์ซ์๋ง
^Hello โ โHelloโ๋ก ์์
end$ โ โendโ๋ก ๋
๋ฉํฐ๋ผ์ธ ํ๋๊ทธ m์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ฐ ์ค์ ์์/๋๋ ์ต์ปค๋ก ์ทจ๊ธ๋๋ค. ๋ํ ^๋ ๋ฌธ์ ํด๋์ค ๋ฐ์ผ ๋์๋ง ์ต์ปค๋ก ์ฌ์ฉ๋๋ค.
8) ( ) - ๊ทธ๋ฃน/์บก์ฒ
(โฆ)๋ก ๋ฌถ์ผ๋ฉด ํ๋์ ํ ํฐ์ฒ๋ผ ์ทจ๊ธ๋์ด ์๋์๋ฅผ ๋ถ์ผ ์ ์๋ค.
(ab){3} โ ababab
(https?):// โ http:// ๋๋ https://
๋ํ (โฆ)๋ก ๊ฐ์ผ ๋ถ๋ถ์ด ๋งค์น๋ ๋ ์ค์ ํ
์คํธ๋ฅผ ๊ทธ๋ฃน์ 1๋ถํฐ ์์๋๋ก ์ ์ฅํ๋ค.
์
๋ ฅ: 2025-08-28
ํจํด: (\d{4})-(\d{2})-(\d{2})
๊ทธ๋ฃน: 1 = โ2025โ, 2 = โ08โ, 3 = โ28โ
์ด๋ ๊ฒ ์ ์ฅ๋ ๋ฌธ์์ด์ ๊ทธ๋๋ก ๋ค์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๋ง์ฝ ์บก์ฒ๋ง ํ๊ณ ๊ทธ๋ฃน์ ์ฌ์ฌ์ฉํ ์ผ์ด ์๋ค๋ฉด (?:..)์ ์ฌ์ฉํ๋ค.
^(?:https?|ftp):// โ http/https/ftp ๊ณตํต ์ ๋๋ถ ์ฒ๋ฆฌ
