๊ฐ์
Lookahead Assertions๋ ์ดํดํ๊ธฐ๊ฐ ์ด๋ ต๋ค. ํ์ง๋ง ์์์ ํจ๊ป๋ผ๋ฉด ์ด๋ค ๊ฒฝ์ฐ์ ์ด๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง ์ ์ ์์ ๊ฒ์ด๋ค.
์ ๊ท์ .+:
๊ณผ ์ผ์นํ๋ ๋ฌธ์์ด๋ก http:
๋ฅผ ๋๋ ค์ฃผ์๋ค. ๋ง์ฝ http:
๋ผ๋ ๊ฒ์ ๊ฒฐ๊ณผ์์ :
์ ์ ์ธํ๊ณ ์ถ๋ ฅํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ์ ์๋ ๊ทธ๋๋ง ๊ฐ๋จํ์ง๋ง ํจ์ฌ ๋ณต์กํ ์ ๊ท์์ด์ด์ ๊ทธ๋ฃจํ์ ์ถ๊ฐ๋ก ํ ์ ์๋ค๋ ์กฐ๊ฑด๊น์ง ๋ํด์ง๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
์ด๋ด ๋ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ๋ฐ๋ก ์ ๋ฐฉ ํ์์ด๋ค. ์ ๋ฐฉ ํ์์๋ ๊ธ์ (Positive)๊ณผ ๋ถ์ (Negative)์ 2์ข ๋ฅ๊ฐ ์๊ณ ๋ค์๊ณผ ๊ฐ์ด ํํํ๋ค.
- ๊ธ์ ํ ์ ๋ฐฉ ํ์(
(?=...)
) -...
์ ํด๋น๋๋ ์ ๊ท์๊ณผ ๋งค์น๋์ด์ผ ํ๋ฉฐ ์กฐ๊ฑด์ด ํต๊ณผ๋์ด๋ ๋ฌธ์์ด์ด ์๋น๋์ง ์๋๋ค. - ๋ถ์ ํ ์ ๋ฐฉ ํ์(
(?!...)
) -...
์ ํด๋น๋๋ ์ ๊ท์๊ณผ ๋งค์น๋์ง ์์์ผ ํ๋ฉฐ ์กฐ๊ฑด์ด ํต๊ณผ๋์ด๋ ๋ฌธ์์ด์ด ์๋น๋์ง ์๋๋ค.
๊ธ์ ํ ์ ๋ฐฉ ํ์
๊ธ์ ํ ์ ๋ฐฉ ํ์์ ์ฌ์ฉํ๋ฉด http:
์ ๊ฒฐ๊ณผ๋ฅผ http
๋ก ๋ฐ๊ฟ ์ ์๋ค.
>>> p = re.compile(".+(?=:)")
>>> m = p.search("http://google.com")
>>> print(m.group())
http
์ ๊ท์ ์ค :์ ํด๋นํ๋ ๋ถ๋ถ์ ๊ธ์ ํ ์ ๋ฐฉ ํ์ ๊ธฐ๋ฒ์ ์ ์ฉํ์ฌ (?=:)
์ผ๋ก ๋ณ๊ฒฝํ์๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๊ธฐ์กด ์ ๊ท์๊ณผ ๊ฒ์์์๋ ๋์ผํ ํจ๊ณผ๋ฅผ ๋ฐํํ์ง๋ง :
์ ํด๋นํ๋ ๋ฌธ์์ด์ด ์ ๊ท์ ์์ง์ ์ํด ์๋น๋์ง ์์(๊ฒ์์๋ ํฌํจ๋์ง๋ง ๊ฒ์ ๊ฒฐ๊ณผ์๋ ์ ์ธ๋จ) ๊ฒ์ ๊ฒฐ๊ณผ์์๋ :
์ด ์ ๊ฑฐ๋ ํ ๋๋ ค์ฃผ๋ ํจ๊ณผ๊ฐ ์๋ค.
์ฌ๊ธฐ์ ์ ์ ์๋ ์ฌ์ค์, Lookahead Assertions์ด zero-width assertion์ด๋ผ๋ ์ฌ์ค์ด๋ค. ์ค์ ๊ฒ์์ ์ ์ฉ๋๊ธฐ ์ํด์๋ ์์ง์ด ์ด๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋๋ฐ ๊ทธ๋ ์ง๋ ์๊ณ , ๊ทธ์ ์๋์ง ํ์ธ๋ง ํด์ฃผ๋ ์ญํ ์ด๋ค. ์ด๋ฅผ ์๋น๋๋ค ๋ผ๋ ํํ์ผ๋ก ์ ์๋ค๋ ๊ฒ์ ์ ๊ธ์์ ๋ฐฐ์ ๋ค.
๋ถ์ ์ ์ ๋ฐฉ ํ์
์, ์ด๋ฒ์๋ ๋ค์ ์ ๊ท์์ ๋ณด์.
์ด ์ ๊ท์์ ํ์ผ ์ด๋ฆ + . + ํ์ฅ์
๋ฅผ ๋ํ๋ด๋ ์ ๊ท์์ด๋ค. ์ด ์ ๊ท์์ foo.bar
, autoexec.bat
, sendmail.cf
๊ฐ์ ํ์์ ํ์ผ๊ณผ ๋งค์น๋ ๊ฒ์ด๋ค.
์ด ์ ๊ท์์ ํ์ฅ์๊ฐ โbat์ธ ํ์ผ์ ์ ์ธํด์ผ ํ๋คโ๋ ์กฐ๊ฑด์ ์ถ๊ฐํด ๋ณด์. ๊ฐ์ฅ ๋จผ์ ์๊ฐํ ์ ์๋ ์ ๊ท์์ ๋ค์๊ณผ ๊ฐ๋ค.
์ด ์ ๊ท์์ | ๋ฉํ ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฅ์์ ์ฒซ ๋ฒ์งธ ๋ฌธ์๊ฐ b๊ฐ ์๋๊ฑฐ๋ ๋ ๋ฒ์งธ ๋ฌธ์๊ฐ a๊ฐ ์๋๊ฑฐ๋ ์ธ ๋ฒ์งธ ๋ฌธ์๊ฐ t๊ฐ ์๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํ๋ค. ์ด ์ ๊ท์์ ์ํ์ฌ foo.bar
๋ ์ ์ธ๋์ง ์๊ณ autoexec.bat
์ ์ ์ธ๋์ด ๋ง์กฑ์ค๋ฌ์ด ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ค๋ค. ํ์ง๋ง ์ด ์ ๊ท์์ sendmail.cf
์ฒ๋ผ ํ์ฅ์์ ๋ฌธ์ ๊ฐ์๊ฐ 2๊ฐ์ธ ์ผ์ด์ค๋ฅผ ํฌํจํ์ง ๋ชปํ๋ ์ค๋์์ ํ๊ธฐ ์์ํ๋ค.
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊พธ์ด์ผ ํ๋ค.
ํ์ฅ์์ ๋ฌธ์ ๊ฐ์๊ฐ 2๊ฐ์ฌ๋ ํต๊ณผ๋๋ ์ ๊ท์์ด ๋ง๋ค์ด์ก๋ค. ํ์ง๋ง ์ ๊ท์์ ์ ์ ๋ ๋ณต์กํด์ง๊ณ ์ดํดํ๊ธฐ ์ด๋ ค์์ง๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์์ bat
ํ์ผ๋ง๊ณ exe
ํ์ผ๋ ์ ์ธํ๋ผ๋ ์กฐ๊ฑด์ด ์ถ๊ฐ๋ก ์๊ธด๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์ด ๋ชจ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ ๊ท์์ ๊ตฌํํ๋ ค๋ฉด ํจํด์ ๋์ฑ๋ ๋ณต์กํด์ง ๊ฒ์ด๋ค. ์ด๋ฐ ์ํฉ์์ ์ฐ๋ฆฌ๋ ๋ถ์ ์ ์ ๋ฐฉ ํ์์ ์ฌ์ฉํ๋ค.
ํ์ฅ์๊ฐ bat
๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง ํต๊ณผ๋๋ค๋ ์๋ฏธ์ด๋ค. bat
๋ฌธ์์ด์ด ์๋์ง ์กฐ์ฌํ๋ ๊ณผ์ ์์ ๋ฌธ์์ด์ด ์๋น๋์ง ์์ผ๋ฏ๋ก bat
๊ฐ ์๋๋ผ๊ณ ํ๋จ๋๋ฉด ๊ทธ ์ดํ ์ ๊ท์ ๋งค์น๊ฐ ์งํ๋๋ค.
exe
์ญ์ ์ ์ธํ๋ผ๋ ์กฐ๊ฑด์ด ์ถ๊ฐ๋๋๋ผ๋ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํ ํํํ ์ ์๋ค.