ํน์ ๋ฌธ์์ด์ด ๋ฐ๋ณต๋๋์ง์ ๋ํด์ ์๊ธฐ ์ํด์๋ ์ด๋ ํ ์ ๊ท์์ ์์ฑํด์ผ ํ ๊น? ์ฐ๋ฆฌ๊ฐ ์์์ ๋ฐฐ์ด ๋ด์ฉ์ผ๋ก๋ ํ ์ ์๋ค. ์ด๋ ๊ฒ ํน์ ๋ฌธ์์ด์ด ๋จ์๋ก ๊ตฌ์ฑ๋์ด ๊ฒ์์ ์งํํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ทธ๋ฃจํ์ด๋ค.
()
์ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ๊ทธ๋ฃจํ์ ์งํํ ์ ์๋ค.
์๋ฏธ๋ก ์ ์ผ๋ก ๊ทธ๋ฃจํํ๊ธฐ
์ด๋ ๊ฒ ๋ฌถ์ด์ ๋ฌด์ธ๊ฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค๋ฉด ์ถ๊ฐ์ ์ผ๋ก ์ด์ ์ด ์๊ธด๋ค.
์ด๋ ๊ฒ ์์ฑํ๊ฒ ๋๋ฉด, ์ด๋ฆ + " " + ์ ํ๋ฒํธ
ํํ์ ๋ฌธ์์ด์ ์ฐพ์ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ์ด๋ฆ๋ง ๋ฝ์๋ด๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ์ฌ์ค ์์ ๋ฐ๋ณต์ ๋ชฉ์ ๋ณด๋ค ์ด๋ฐ ์๋ฏธ๋ก ์ ์ผ๋ก ๋ฌถ์ด์ ๋ฝ์๋ด๊ณ ์ ํ๋ ๋ชฉ์ ์ธ ๊ฒฝ์ฐ๊ฐ ๋ ๋ง๋ค. ์ด ๋ ๊ทธ๋ฃจํ์ ์ฌ์ฉํด๋ณด์.
์ด๋ฆ์ ํด๋นํ๋ \w+
๋ถ๋ถ์ ๊ทธ๋ฃน (\w+)
์ผ๋ก ๋ง๋ค๋ฉด match ๊ฐ์ฒด์ group(์ธ๋ฑ์ค) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ฃจํ๋ ๋ถ๋ถ์ ๋ฌธ์์ด๋ง ๋ฝ์๋ผ ์ ์๋ค. group ๋ฉ์๋์ ์ธ๋ฑ์ค๋ ๋ค์๊ณผ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ๋๋ค.
|group(์ธ๋ฑ์ค)|์ค๋ช | |:--------:------|::----| |group(0)|๋งค์น๋ ์ ์ฒด ๋ฌธ์์ด| |group(1)|์ฒซ ๋ฒ์งธ ๊ทธ๋ฃน์ ํด๋น๋๋ ๋ฌธ์์ด| |group(2)|๋ ๋ฒ์งธ ๊ทธ๋ฃน์ ํด๋น๋๋ ๋ฌธ์์ด| |group(n)|n ๋ฒ์งธ ๊ทธ๋ฃน์ ํด๋น๋๋ ๋ฌธ์์ด|
์ด๋ ๊ฒ ํ๋ฉด ์ด 2๊ฐ์ ๊ทธ๋ฃน์ด ๋ฐ์ํ๊ณ , ์ ํ๋ฒ์ ํด๋นํ๋ ๋ถ๋ถ์ ์ ๊ทผํ๊ณ ์ถ์ผ๋ฉด group(2)
๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ๊ทธ๋ผ ์ ํ๋ฒํธ์์ ํต์ ์ฌ ๋ฒํธ๋ฅผ ๋ฝ์๋ด๊ณ ์ ํ๋ฉด ์ด๋ป๊ฒ ํ ๊น?
์ด ์์ ์์ ์ ์ ์๋ ๊ฒ์ group์ ์ค์ฒฉํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ๋ฐ๊นฅ์ชฝ์์ ์์ชฝ์ผ๋ก ๋ค์ด๊ฐ ์๋ก group์ index๊ฐ ์ฆ๊ฐํ๋ค. zero-width assertion์ด๊ธฐ ๋๋ฌธ์ ์ด ๋ชจ๋ ์์ ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์ผ๋ํด๋์.
๊ทธ๋ฃจํ๋ ๋ฌธ์์ด ์ฌ์ฐธ์กฐํ๊ธฐ
๊ทธ๋ฃน์ ๋ ํ๋ ์ข์ ์ ์ ํ ๋ฒ ๊ทธ๋ฃจํํ ๋ฌธ์์ด์ ์ฌ์ฐธ์กฐ(Backreferences)ํ ์ ์๋ค๋ ์ ์ด๋ค.
์ ๊ท์ (\b\w+)\s+\1
์ (๊ทธ๋ฃน) + " " + ๊ทธ๋ฃน๊ณผ ๋์ผํ ๋จ์ด
์ ๋งค์น๋จ์ ์๋ฏธํ๋ค. ์ด๋ ๊ฒ ์ ๊ท์์ ๋ง๋ค๊ฒ ๋๋ฉด 2๊ฐ์ ๋์ผํ ๋จ์ด๋ฅผ ์ฐ์์ ์ผ๋ก ์ฌ์ฉํด์ผ๋ง ๋งค์น๋๋ค. ์ด๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก ์ฌ์ฐธ์กฐ ๋ฉํ ๋ฌธ์์ธ \1
์ด๋ค. \1
์ ์ ๊ท์์ ๊ทธ๋ฃน ์ค ์ฒซ ๋ฒ์งธ ๊ทธ๋ฃน์ ๊ฐ๋ฆฌํจ๋ค. ๋ ๋ฒ์งธ ๊ทธ๋ฃน์ ์ฐธ์กฐํ๋ ค๋ฉด \2๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
๊ทธ๋ฃจํ๋ ๋ฌธ์์ด์ ์ด๋ฆ ๋ถ์ด๊ธฐ
์ ๊ท์ ์์ ๊ทธ๋ฃน์ด ๋ฌด์ฒ ๋ง์์ง๋ค๊ณ ์๊ฐํด ๋ณด์. ์๋ฅผ ๋ค์ด ์ ๊ท์ ์์ ๊ทธ๋ฃน์ด 10๊ฐ ์ด์๋ง ๋์ด๋ ๋งค์ฐ ํผ๋์ค๋ฌ์ธ ๊ฒ์ด๋ค. ๊ฑฐ๊ธฐ์ ๋ํด ์ ๊ท์์ด ์์ ๋๋ฉด์ ๊ทธ๋ฃน์ด ์ถ๊ฐ, ์ญ์ ๋๋ฉด ๊ทธ ๊ทธ๋ฃน์ ์ธ๋ฑ์ค๋ก ์ฐธ์กฐํ ํ๋ก๊ทธ๋จ๋ ๋ชจ๋ ๋ณ๊ฒฝํด ์ฃผ์ด์ผ ํ๋ ์ํ๋ ๊ฐ๊ฒ ๋๋ค. ๋ง์ฝ ๊ทธ๋ฃน์ ์ธ๋ฑ์ค๊ฐ ์๋ ์ด๋ฆ(Named Groups)์ผ๋ก ์ฐธ์กฐํ ์ ์๋ค๋ฉด ์ด๋จ๊น? ์ฆ ๋์ ๋๋ฆฌ์ ๊ฐ์ ํ์์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ฐ ๋ฌธ์ ์์ ํด๋ฐฉ๋์ง ์์๊น?
์ด๋ฌํ ์ด์ ๋ก ์ ๊ท์์ ๊ทธ๋ฃน์ ๋ง๋ค ๋ ๊ทธ๋ฃน ์ด๋ฆ์ ์ง์ ํ ์ ์๊ฒ ํ๋ค. ๊ทธ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
(?P<name>\w+)\s+((\d+)[-]\d+[-]\d+)
์ ์ ๊ท์์ ์์์ ๋ณธ ์ด๋ฆ๊ณผ ์ ํ๋ฒํธ๋ฅผ ์ถ์ถํ๋ ์ ๊ท์์ด๋ค. ๊ธฐ์กด๊ณผ ๋ฌ๋ผ์ง ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ๋ค.
(\w+) --> (?P<name>\w+)
๋๋จํ ๋ณต์กํด์ง ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง (\w+)
๋ผ๋ ๊ทธ๋ฃน์ name์ด๋ผ๋ ์ด๋ฆ์ ๋ถ์ธ ๊ฒ์ ๋ถ๊ณผํ๋ค. ์ฌ๊ธฐ์์ ์ฌ์ฉํ (?...)
ํํ์์ ์ ๊ท ํํ์์ ํ์ฅ ๊ตฌ๋ฌธ์ด๋ค. ์ด ํ์ฅ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ธฐ ์์ํ๋ฉด ๊ฐ๋
์ฑ์ด ์๋นํ ๋จ์ด์ง๊ธด ํ์ง๋ง ๋ฐ๋ฉด์ ๊ฐ๋ ฅํจ์ ๊ฐ๊ฒ ๋๋ค. ๊ทธ๋ฃน์ ์ด๋ฆ์ ์ง์ด ์ฃผ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ์ฅ ๊ตฌ๋ฌธ์ ์ฌ์ฉํด์ผ ํ๋ค.
(?P<๊ทธ๋ฃน๋ช
>...)
๊ทธ๋ฃน์ ์ด๋ฆ์ ์ง์ ํ๊ณ ์ฐธ์กฐํ๋ ๋ค์ ์๋ฅผ ๋ณด์.
์ ์์์ ๋ณผ ์ ์๋ฏ์ด name์ด๋ผ๋ ๊ทธ๋ฃน ์ด๋ฆ์ผ๋ก ์ฐธ์กฐํ ์ ์๋ค. ๊ทธ๋ฃน ์ด๋ฆ์ ์ฌ์ฉํ๋ฉด ์ ๊ท์ ์์์ ์ฌ์ฐธ์กฐํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
์ ์์์ ๋ณผ ์ ์๋ฏ์ด ์ฌ์ฐธ์กฐํ ๋์๋ (?P=๊ทธ๋ฃน์ด๋ฆ)
์ด๋ผ๋ ํ์ฅ ๊ตฌ๋ฌธ์ ์ฌ์ฉํด์ผ ํ๋ค.