๊ฒ์์: Eyal Schneider, 2009๋
5์ 21์ผ java.util.regex ํจํค์ง๋ Java ๋ฒ์ 1.4์ ์ถ๊ฐ๋์์ต๋๋ค. ๊ทธ๊ฒ์ ๋งค์ฐ ๊ฐ๋ ฅํ ๋๊ตฌ์ด๋ฉฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ ค๋ฉด ๋ง์คํฐ๊ฐ ๋์ด์ผ ํฉ๋๋ค.
์ ๊ท ํํ์์ด true ์ธ ๊ฒฝ์ฐ์๋์ง๋ฅ์ ์ผ๋ก ์์ฑํ์ง ์์ผ๋ฉด ์๋๊ฐ ๋งค์ฐ ๋๋ ค์ง ์ ์์ต๋๋ค. ๋ฌธ์ ์ ์์ธ์ ์ดํดํ๊ณ ์ถ๋ค๋ฉด ๊ณ์ ์ฝ์ผ์ธ์. ์๋๋ฉด ํ์ด์ง ๋์ผ๋ก ์คํฌ๋กคํ์ฌ Java์ ์ ๊ท์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐ ์ ์ฉํ 10๊ฐ์ง ํ์ ์ฐพ์ ์ ์์ต๋๋ค.
์ ๋ง ๊ทธ๋ ๊ฒ ๋๋ฆฐ๊ฐ์?
๋ฌธ์ "a"์ "b"๊ฐ ํฌํจ๋ ํ๋ง ์ ํํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
(a*b*)*
๊ทธ๋ฌ๋ ์๋ฅผ ๋ค์ด "aaaaaaaaaaaaaaaaaaaaaaaaaaaax" ๋ฌธ์์ด์ ์ฌ์ฉํ์ฌ ํํ์์ ์คํํ๋ฉด ์๋ฃ๋๊ธฐ๊น์ง ๋ช ๋ถ ์ ๋ ๊ฑธ๋ฆฌ๋ฉฐ ์ผ์นํ๋ ํญ๋ชฉ์ด ์๋ค๊ณ ๋ณด๊ณ ๋ฉ๋๋ค. ๋ฌผ๋ก ์ด ๊ฒฝ์ฐ ๊ฐ์ฅ ์ข์ ์ ๊ท์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
(a|b)*
๋์ผํ ๋ฌธ์์ด์ ์ฌ์ฉํ๋ ๋ด ์ปดํจํฐ์์๋ 1๋ฐ๋ฆฌ์ด๋ ์ฑ ๊ฑธ๋ฆฌ์ง ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ถ๋ช
ํ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํฉ๋๊น?
๋๋ถ๋ถ์ ์ ๊ท ํํ์ ์์ง๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Java๋ NFA(Non-Deterministic Finite Automata) ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ์์ง์ ์ ๊ท์ ๊ตฌ์ฑ ์์๋ฅผ ํ๋์ฉ ๊ฒ์ํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์
๋ ฅ ๋ฌธ์์ด์ ์งํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ "๋ง๋ค๋ฅธ ๊ณจ๋ชฉ"์ ๋๋ฌํ๋ฉด ์ ์ ํ ๋์์ ์ฐพ๊ธฐ ์ํด ์ฒ์์ผ๋ก ๋์๊ฐ ์ ์์ต๋๋ค.
์๋์( *, +, ? ) ๋ฐ ๊ต๋(์:
a|b|c|d ) ์ ๊ฐ์ ์ ๊ท ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ฒด ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค . ์ด ์ฐ๊ตฌ ๊ธฐ๋ฒ์ ์ญ์ถ์ ์ด๋ผ๊ณ ํฉ๋๋ค. ์์ ๋์ฐํ ์์์ ์์ง์ ์ผ์นํ๋ ํญ๋ชฉ์ด ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์ ๋๊น์ง ๊ธฐํธ "a"์ ๋ชจ๋ ๊ณ์ด ๋ถํด๋ฅผ ๋ ์์ ๊ณ์ด๋ก ์ค์ ๋ก ์ดํด๋ด
๋๋ค. ์ด ์์์๋ ์ญ์ถ์ ์๊ณ ๋ฆฌ์ฆ์ด ์
๋ ฅ ๋ฌธ์์ด์ ๊ธธ์ด์ ๋ฐ๋ผ ๊ธฐํ๊ธ์์ ์ธ ์๊ฐ ์ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ด๋ ๋ํ NFA์ ์ค์ํ ์์ฑ์ ๋ณด์ฌ์ค๋๋ค. ํจํด๊ณผ ๊ฑฐ์ ์ผ์นํ๋ ์ต์
์ ๊ฒฝ์ฐ๊ฐ ํญ์ ์กด์ฌํ๋ค๋ ๊ฒ์
๋๋ค. ์ผ์นํ๋ ํญ๋ชฉ์ด ๋ฐ๊ฒฌ๋๋ฉด ๊ฒ์์ด ์ค์ง๋ฉ๋๋ค. ์ ๊ท์์ ์ฌ์ฉ๋๋ ๋ ๋ค๋ฅธ ์ฃผ์ ์ ๊ทผ ๋ฐฉ์์ DFA(Deterministic Finite Automaton)์
๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์์ ์ ๊ท์์ ์ญ์ถ์ ์์ด ์
๋ ฅ ๋ฌธ์์ด์ ๋ฌธ์๋ณ๋ก ํ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์๋ ์ฅ์น๋ฅผ ์ค์ ๋ก ๊ตฌ์ถํฉ๋๋ค. ์ด๋ ์ ๊ท์์ ๋ณต์ก์ฑ์ ๊ด๊ณ์์ด ์ ์ฒด ์
๋ ฅ์ ์ ํ ์๊ฐ์ ์ ๊ณตํฉ๋๋ค. NFA์์์ ๊ฐ์ด ์ผ์นํ๋ ๋ฌธ์์ด์ ์์ฐจ์ ์ผ๋ก ๊ฒ์ํ๋ ๋์ DFA๋ ๋ณ๋ ฌ ๊ฒ์์ ์๋ฎฌ๋ ์ด์
ํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ Java(๋ฐ .NET, Perl, Python, Ruby, PHP ๋ฑ)์์๋ ํจ์ฌ ๋ ๋์ ๋์์ ์ ๊ณตํ๋ DKA๊ฐ ์๋ NKA๋ฅผ ์ฌ์ฉํฉ๋๊น? ๊ทธ ์ด์ ๋ NKA๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ์ค์ํ ์ด์ ์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
- ๋ ๋น ๋ฅด๊ฒ ์ปดํ์ผ๋๊ณ ํจ์ฌ ์ ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
- ๋ช ๊ฐ์ง ์ ์ฉํ ๊ธฐ๋ฅ์ ํ์ฉํฉ๋๋ค( ์์ธํ ๋ด์ฉ์ Sun์ ํํ ๋ฆฌ์ผ ์ฐธ์กฐ ).
- ๊ทธ๋ฃน ์บก์ฒ ๋ฐ ๋ฐฑ๋งํฌ
- ์์น ํ์ธ
- ํ์ฅ ์๋์(ํ์์ค๋ฝ๊ณ ๊ฒ์ผ๋ฅธ)
์ธ๊ธฐ ์๋ ์ฉ์ด์ธ NKA์ DKA๋ ์ ๊ท ํํ์์ ๋งฅ๋ฝ์์ ์ฌ์ฉ๋ ๋ ๋ถ์ ํํ๋ค๋ ์ ์ ์ ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ก ์ ์ผ๋ก ์ด ๋ ๋ชจ๋ธ์ ๋์ผํ ์ปดํจํ
์ฑ๋ฅ์ ๊ฐ์ต๋๋ค. ์ด๋ ๋ค๋ฅธ ์คํ ๋งํ ๋ชจ๋ธ์์๋ ํํํ ์ ์๋ ์ ๊ท์์ ํ๋์ ์คํ ๋งํ ๋ชจ๋ธ์์ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ค์ ๋ก๋ ๋ ๊ฐ์ง ์ ํ์ ๊ตฌํ์ด ์๋ฏธ๋ก ์ ์ผ๋ก ๋ฌ๋ผ์ง๋๋ก ๋ ๋ง์ ๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค. NKA ์์ง์ ๋ ๋ง์ ์ ์ฐ์ฑ์ ์ ๊ณตํ๋ฏ๋ก ์ปดํจํ
์ฑ๋ฅ ๋ฉด์์ DKA๋ณด๋ค ์ฐ์ํฉ๋๋ค. DFA์ ์๋์ NFA์ ๊ณ ์ ํ ๊ธฐ๋ฅ์ผ๋ก ์ธํด ์ ๊ท์์ ๊ตฌํํ๋ "๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง" ๋ฐฉ๋ฒ์ด ๋ ๊ฐ์ง ๋ ์์ต๋๋ค. ์ผ๋ถ ๊ตฌํ์์๋ ๋ ๊ฐ์ง ์ ํ์ ๋ชจ๋ ์ฌ์ฉํ๊ณ (์: ๋ฐํ์์ ํน์ ์์ง์ ์ ํํ๋ GNU egrep) ์ผ๋ถ๋ ๋ชจ๋ ์ด์ ์ ๊ฐ์ถ ์ง์ ํ ํ์ด๋ธ๋ฆฌ๋ ๋ฒ์ (์: Tcl ์ ๊ท์)์ ๊ตฌํํ์ต๋๋ค.
์กฐ์ธ
๋ค์์ Java์์ ์ ๊ท์ ํจ์จ์ฑ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ๊ฐ์ง ํ์
๋๋ค. ๊ทธ๋ค ์ค ๋ค์๋ ์์ต์ ์ค์ด๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
1) ์ฌ์ ์ปดํ์ผ
์ง๋ถํ์ง๋ง ์ธ๊ธํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ ๊ท์์ ๋ ๋ฒ ์ด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฏธ๋ฆฌ ์ปดํ์ผํด์ผ ํฉ๋๋ค.
// ะบะพะผะฟะธะปััะธั p = Pattern.compile(regex, flags); โฆ // ะธัะฟะพะปัะทะพะฒะฐะฝะธะต Matcher a = p.matcher(input);
2) ๊ฒ์ผ๋ฅธ ์๋์ vs ํ์์ค๋ฌ์ด ์๋์
๊ธฐ๋ณธ์ ์ผ๋ก ์๋์(
* + ? )๋ ํ์์ ์
๋๋ค. ์ด๋ ๊ฐ๋ฅํ ๊ฐ์ฅ ๊ธด ์ํ์ค์ ์ผ์น๋ฅผ ์์ํ ๋ค์ ํ์ํ ๊ฒฝ์ฐ ์ ์ฐจ์ ์ผ๋ก ๋ค์ ์์
ํ๋ค๋ ์๋ฏธ์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ผ์น ํญ๋ชฉ์ด ์งง๋ค๋ ๊ฒ์ ๋ฏธ๋ฆฌ ์๊ณ ์๋ ๊ฒฝ์ฐ ์ง์ฐ ์๋์๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ฐ์ฅ ์์ ์ผ์น ํญ๋ชฉ๋ถํฐ ์์ํ์ฌ ํ์ํ ๊ฒฝ์ฐ ๋ ๋ฉ๋ฆฌ ์ด๋ํฉ๋๋ค. "hello" ์ํ์ค์ ์ผ์นํ๋ ํ๋ง ์ฐพ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ผ๋ฐ
.*hello.*๋ ๋ชจ๋ ์์
์ ์ฌ๋ฐ๋ฅด๊ฒ ์ํํ์ง๋ง "hello"๊ฐ ์ผ๋ฐ์ ์ผ๋ก ํ
์คํธ ์์ ๋ถ๋ถ์ ๋ ๊ฐ๊น๊ฒ ๋ํ๋๋ค๋ ๊ฒ์ ์๊ณ ์์ผ๋ฉด
.*?hello.*๊ฐ ํ๊ท ์ ์ผ๋ก ๋ ๋น ๋ฅด๊ฒ ์๋ํฉ๋๋ค.
3) ๊ฐ๋ฅํ๋ค๋ฉด ์ดํ์ ์๋์๋ฅผ ์ฌ์ฉํ์ธ์.
์ฑ๋ฅ์ ์ํฅ์ ์ฃผ์ง๋ง ์ผ๋ฐ ๋์์๋ ์ํฅ์ ์ฃผ์ง ์๋ ๊ฒ์ผ๋ฅธ ์๋์์ ๋ฌ๋ฆฌ, ์ดํ์์ ์๋์๋ ์ค์ ๋ก ์ ๊ท ํํ์์ ์๋ฏธ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
* ๋์
*+ ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฒซ ๋ฒ์งธ ์ผ์น ํญ๋ชฉ์ ํ์์ (์ฆ, *์ธ ๊ฒ์ฒ๋ผ ๊ฐ๋ฅํ ๊ฐ์ฅ ํฐ ์ผ์น )์ด ๋์ง๋ง, ์ ์ฒด ๊ฒ์์ด ์คํจํ๋๋ผ๋ ์คํจํ๋ฉด ํด๋ฐฑ์ด ๋ฐ์ํ์ง ์์ต๋๋ค. ์ธ์ ์ ์ฉํ ๊น์? ๋ฐ์ดํ๋ก ๋ฌถ์ธ ํ
์คํธ๋ฅผ ์ฐพ์์ผ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ผ๋ฐ
\"[^\"]*\"๋ ์ ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ถ์ ์ ์ธ ๊ฒฝ์ฐ(์: "bla bla bla)"์์๋ ๋ถํ์ํ ๋ค์ฌ์ฐ๊ธฐ๊ฐ ๋ฉ๋๋ค.
\"[^\"]*+\"๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ฌ์ฐ๊ธฐ๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค . ํํ์ ์๋ฏธ๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ๋กค๋ฐฑํฉ๋๋ค. ๋
๋ฆฝ์ ์ธ ๊ทธ๋ฃนํ๋ ๋์ผํ ํจ๊ณผ๋ฅผ ์ป๊ณ ๋ ๋ง์ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค(
Sun์ ์์ต์ ์ฐธ์กฐ ).
4) ๊ทธ๋ฃน ์บก์ฒ๋ฅผ ํผํ์ญ์์ค
๊ดํธ ์์ ํํ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ทธ๋ฃน์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์ด๋ ์ฑ๋ฅ์ ์ฝ๊ฐ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
( ๋์
(?: ๋ก ์์ํ์ฌ ๊ฐ๋ฅํ ๋๋ง๋ค ๊ทธ๋ฃน์ "์บก์ฒํ ์ ์๊ฒ" ๋ง๋ญ๋๋ค .
5) ์ธํฐ๋ฆฌ๋น์ ํ๋ช
ํ๊ฒ ์ฌ์ฉํ์ธ์
์ธํฐ๋ฆฌ๋ธ๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ(์:
Paul|Jane|Chris ) ์์ง์ด ์ต์
์ ์ผ์น์ํค๋ ค๊ณ ์๋ํ๋ ์์๋ ํด๋น ์ต์
์ด ๋ํ๋๋ ์์์ ๋์ผํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ํ์ฉํ๊ณ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ต์
์ ์์ ๋ถ๋ถ์ ๋ ๊ฐ๊น๊ฒ ๋ฐฐ์นํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ๊ท ๊ธ์ ์ ์๋ต ์๊ฐ์ด ํฅ์๋ฉ๋๋ค.
6) ๋ชจํธํจ์ ํผํ๋ผ
์
๋ ฅ ๋ฌธ์์ด์์ ์๋ก ๋ค๋ฅธ ์ผ์น ํญ๋ชฉ ์๋ฅผ ์ต์ํํ๋ ๋ฐฉ์์ผ๋ก ์ ๊ท์์ ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ธฐ์ฌ ์์ ๋ถ๋ถ์ ์ ๊ณต๋ ์ ๊ท์
(a*b*)*๋ฅผ ์ฌ์ฉ ํ๋ฉด "aabb" ๋ฌธ์์ด์ด ๋๋ฌด ๋ง์ ๋ฐฉ์์ผ๋ก ํด์๋ ์ ์์ต๋๋ค. ๋ฐ๋ฉด
(a2b2) (a1)(a1)(b1)(b1) (a2)(b2) (a1)(a1b2) etcโฆ
Regexp
(a|b)*๋ ๊ณ ์ ํ ๋ฌธ์์ด๋ง ํด์ํฉ๋๋ค. ๊ธ์ ์ ์ผ๋ก ์กฐํฉํฉ๋๋ค. ์ด๋
๊ฑฐ์ ์ผ์นํ๋ ๊ฒฝ์ฐ ์์ต์ ์ค์ด๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
7) ๋ฏธ๋ฆฌ๋ณด๊ธฐ
๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฌ ์์น์ ์ผ์ชฝ/์ค๋ฅธ์ชฝ์ ์ํ์ค์ ๋ํ ์ ํ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ํนํ, ๋ถ์ ์ ์ธ ์์ธก์ ์ฌ์ฉํ๋ฉด ์ผ๋ถ ์ํ์ค๊ฐ โโํฌํจ๋์ง ์์ ํ์ ๊ฒ์ํ ์ ์์ต๋๋ค(์ด๊ฒ์ด ์์ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์!). ์ด๊ฒ์ด ์ด๋ป๊ฒ ์์ฐ์ฑ์ ๋์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๊น? ๋งํฌ ํ๊ทธ์์ URL์ ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ค์ ์ ๊ท์์ ๊ณ ๋ คํ์ญ์์ค.
a .* href=(\S*).*/
์ผ๋ฐ ํ๊ทธ์ ๊ฒฝ์ฐ ์ด ํํ์์ ํ
์คํธ์ "href" ์์ฑ์ด ํฌํจ๋ ๊ฒฝ์ฐ์๋ง ์ฃผ์์ ์ผ์นํฉ๋๋ค(\S๋ ๊ตฌ๋ถ ๊ธฐํธ๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฌธ์์ ์ฌ์ฉ๋จ). ๊ทธ๋ฌ๋ ์๋ฅผ ๋ค์ด ์ผ๋ถ ํน์ดํ ํ๊ทธ์์๋ ๋กค๋ฐฑ์ด ๋ฐ์ํฉ๋๋ค. ์: โa href= href=href=โฆ href=๋ญ๊ฐ.โ ๋ค์ ์ ๊ท์์ ํํ์์ ".*"๋ฅผ "href"์ ์ผ์นํ์ง ์๋ ๊ฒ์ผ๋ก ๋ฐ๊ฟ ๋ ์ด๋ฌํ ์ผ์ด ๋ฐ์ํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
a ((?!href).)* href=(\S*)((?!href).)*/
8) ๊ธธ์ด ์ง์
Java์๋ ์ ๊ท์์์ ์ป์ ์ต์ ๋ฐ ์ต๋ ๊ธธ์ด์ ๋ํด ์
๋ ฅ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ํ์ธํ๋ ์ ๊ท์ ์ต์ ํ ํ๋ก๊ทธ๋จ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๊ฒ์์ ์ฆ์ ์ค์งํ ์ ์์ต๋๋ค. ์ด ๋ฉ์ปค๋์ฆ์ ์ง์ํ๋ ค๋ฉด ๊ฐ๋ฅํ ๋๋ง๋ค ๋ฐ๋ณต ํ์๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด
[01]{6}์ 6์ ๊ธธ์ด์ ๋ชจ๋ ์ด์ง ๋ฌธ์์ด๊ณผ ์ผ์นํฉ๋๋ค.
9) ๋์ผํ ๋ผ์ธ ์ ํ
๋๋๋ก ๋์ผํ ๋ฌธ์์ด์ด ๊ทธ๋ฃน์ด๋ ๋์ ๋ด๋ถ์ ์จ๊ฒจ์ ธ ์์ต๋๋ค.
(hello|hell|heel)
์ด ํํ์์ ๋ค์๊ณผ ๊ฐ์ด ๋จ์ํ๋ ์ ์์ต๋๋ค.
he(llo|ll|el)
์ด๋ ๊ฒ ํ๋ฉด ์ ๊ท์ ์ต์ ํ ํ๋ก๊ทธ๋จ์ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
10) ์ ๊ท์ ํ
์คํธ
์ฑ๋ฅ์ด ์ค์ํ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ ๊ท์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋จผ์ ์ ๊ท์์ ํ
์คํธํ๋ ๊ฒ์ด ํ๋ช
ํ ์ ์์ต๋๋ค. ๋ค์ํ ์
๋ ฅ ๋ฐ์ดํฐ์ ๋ํ ํํ์์ ํ
์คํธํ๋ ๋ง์ดํฌ๋ก ๋ฒค์น๋งํฌ๋ฅผ ์์ฑํ์ธ์. ๋ค์ํ ๊ธธ์ด์ ๋ฐ์ดํฐ์ ์ํ๊ณผ ๊ฑฐ์ ์ผ์นํ๋ ๋ฐ์ดํฐ๋ฅผ ํ
์คํธํด์ผ ํฉ๋๋ค.
์ฐ๊ฒฐ:
http://java.sun.com/docs/books/tutorial/essential/regex/index.html http://www.javaworld.com/javaworld/jw-09-2007/jw-09-optimizingregex.html?page =1 http://www.softec.st/en/OpenSource/DevelopersCorner/RegularExpressions/RegularExpressionEngines.html http://www.devarticles.com/c/a/Java/NFA-DFA-POSIX-and-the-Mechanics -ํํ ์ฒ๋ฆฌ/
GO TO FULL VERSION