ÆÞÀÇ ¾ÆÁÖ À¯¿ëÇÑ Æ¯Â¡(°¡Àå À¯¿ëÇÑ Æ¯Â¡ÀÌ ¾Æ´Ï¶ó)Áß Çϳª´Â °·ÂÇÑ ¹®ÀÚ¿ Á¶ÀÛ ´É·ÂÀÌ´Ù. ÀÌ ¹®ÀÚ¿ Á¶ÀÛÀÇ Çٽɿ¡´Â Á¤±Ô½Ä(regular expression:RE)ÀÌ ÀÖ´Ù. ÀÌ Á¤±Ô½ÄÀº ¸¹Àº ´Ù¸¥ UNIX À¯Æ¿¸®Æ¼¿¡¼ °øÀ¯ÇÏ´Â ±â´ÉÀ̱⵵ ÇÏ´Ù.
Á¤±Ô½Ä
Á¤±Ô½ÄÀº ½½·¡½¬¸¦ Æ÷ÇÔÇϸç, =~ ¿¬»êÀÚ·Î ÀÏÄ¡¸¦ ¼öÇàÇÑ´Ù. ´ÙÀ½ ½ÄÀº $sentence º¯¼ö³»¿¡ a) Á¦¸ñ¶ó´Â ¹®ÀÚ¿ÀÌ ³ªÅ¸³ª¸é ÂüÀ̵ȴÙ.
$sentence =~ /a) Á¦¸ñ/
RE´Â ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÑ´Ù. µû¶ó¼ $sentence°¡
$sentence = "A) Á¦¸ñ - °Ì¾ø´Â Å䲤ÀÌ";
¿Í °°´Ù¸é À§ÀÇ ÀÏÄ¡´Â °ÅÁþÀÌ µÈ´Ù. !~ ¿¬»êÀÚ´Â ÀÏÄ¡°¡ ¹ß»ýÇÏÁö ¾ÊÀ½À» Áö½ÃÇÒ ¶§ »ç¿ëµÈ´Ù. À§ÀÇ ¿¹¿¡¼
$sentence !~ /a) Á¦¸ñ/
´Â ÂüÀ̵ȴÙ. ¹®ÀÚ¿ a) Á¦¸ñÀÌ $sentence¿¡ ³ªÅ¸³ªÁö ¾Ê±â ¶§¹®ÀÌ´Ù.
$_, Ư¼öº¯¼ö
if ($sentence =~ /Á¦¸ñ/)
{
print "¿ì¸®´Â °Ì¾ø´Â Å䲤ÀÌ´ëÇØ ¾ê±âÇϰí ÀÖ¾ú´Ù\n";
}
¿Í °°Àº Á¶°Ç¹®À» »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, $sentence°¡ ´ÙÀ½Áß Çϳª¶ó¸é ¸Þ½ÃÁö°¡ Ãâ·ÂµÈ´Ù.
$sentence = "Á¦¸ñ: 겂¾ø´Â Å䲤ÀÌ";
$sentence = "Á¦¸ñ: ºñŰ´Ï¿Í ¾Æ°¡¾¾";
±×·¯³ª ÀÌ ¹®ÀåÀ» Ư¼ö º¯¼ö $_¿¡ ÇÒ´çÇÑ´Ù¸é ÈξÀ »ê¶æÇØÁø´Ù. Ư¼ö º¯¼ö¸¦ »ç¿ëÇÑ´Ù¸é ÀÏÄ¡ ¿¬»êÀÚ³ª ºñÀÏÄ¡ ¿¬»êÀÚ¸¦ »ç¿ëÇÏÁö ¾Ê°í ´ÙÀ½°ú °°ÀÌ °£´ÜÈ÷ ¾µ ¼ö ÀÖ´Ù.
if (/Á¦¸ñ/){
print "¿ì¸®´Â °Ì¾ø´Â Å䲤ÀÌ´ëÇØ ¾ê±âÇϰí ÀÖ¾ú´Ù\n";
}
$_ º¯¼ö´Â ¸¹Àº ÆÞ ¿¬»êÀÚ¿¡´ëÇÑ ±âº» ÇÇ¿¬»êÀÚÀ̸ç, ¾ÆÁÖ ÀÚÁÖ »ç¿ëµÈ´Ù.
RE Ãß°¡
Á¤±Ô½Ä¿¡´Â ¸¹Àº Ư¼ö¹®ÀÚ°¡ ÀÖÀ¸¸ç, À̵é·ÎÀÎÇØ Á¤±Ô½ÄÀº º¸´Ù °·ÂÇØÁöÁö¸¸ ´Ù¼Ò º¹ÀâÇØÁö´Â °æÇâÀÌ ÀÖ´Ù. µû¶ó¼ Á¤±Ô½ÄÀº ÁÖÀDZí°Ô »ç¿ëÇÒ Çʿ䰡 ÀÖ´Ù.
´ÙÀ½Àº Ư¼ö Á¤±Ô½Ä ¹®ÀÚ¿Í À̵éÀÇ ÀǹÌÀÌ´Ù.
. # °³Ç๮ÀÚ¸¦ Á¦¿ÜÇÑ ÀÓÀÇÀÇ Çѹ®ÀÚ
^ # ÇàÀ̳ª ¹®ÀÚ¿ÀÇ ½ÃÀÛ
$ # ÇàÀ̳ª ¹®ÀÚ¿ÀÇ ³¡
* # ¿µ°³ ÀÌ»óÀÇ ¸¶Áö¸· ¹®ÀÚ
+ # ÇѰ³ ÀÌ»óÀÇ ¸¶Áö¸· ¹®ÀÚ
? # ¿µ ¶Ç´Â ÇѰ³ÀÇ ¸¶Áö¸· ¹®ÀÚ
´ÙÀ½Àº Á¤±Ô½ÄÀÇ ¸î¸î ¿¹ÀÌ´Ù. Á¤±Ô½ÄÀ» »ç¿ëÇϱâÀ§ÇØ /.../·Î °¨½Õ´Ù´Â °ÍÀ» ±â¾ïÇϱ⠹ٶõ´Ù.
t.e # t¿¡ À̾î ÀÓÀÇÀÇ ¹®ÀÚ°¡ ³ª¿À°í e°¡ ³ª¿À¹È ÆÐÅÏ
# ÀÌ °ÍÀº
# the
# tie
# ´Â ÀÏÄ¡ÇÏÁö¸¸
# tale
# ´Â ÀÏÄ¡ÇÏÁö ¾Ê´Â´Ù.
^f # f·Î ½ÃÀÛÇÏ´Â Çà
^ftp # ftp·Î ½ÃÀÛÇÏ´Â Çà
e$ # e·Î ³¡³ª´Â Çà
tle$ # tle·Î ³¡³ª´Â Çà
und* # un¿¡ ÀÌ¾î ¿µ°³ ÀÌ»óÀÇ d ¹®ÀÚ
# ÀÌ °ÍÀº
# und
# undd
# unddd (etc)
# ¸¦ ÀÏÄ¡½ÃŲ´Ù.
.* # °³Ç๮ÀÚ¸¦ Á¦¿ÜÇÑ ÀÓÀÇ °³¼öÀÇ ¸ðµç ¹®ÀÚ.
# .´Â °³Ç๮ÀÚ¸¦ Á¦¿ÜÇÑ ÀÓÀÇÀÇ ¹®ÀÚ¸¦ ÀÏÄ¡½Ã۸ç
# *´Â ¾Õ¹®ÀÚ¸¦ ¿µ°³ ÀÌ»ó ÀÏÄ¡½ÃŲ´Ù.
^$ # ºóÁÙ
ÀÌ °ÍÀ̿ܿ¡ ´õ ¸¹Àº ¿É¼ÇÀÌ ÀÖ´Ù. ´ë°ýÈ£´Â ´ë°ýÈ£³»ÀÇ ÀÓÀÇÀÇ ÇÑ ¹®ÀÚ¸¦ ÀÏÄ¡Çϴµ¥ »ç¿ëµÈ´Ù. ´ë°ýÈ£ ³»¿¡¼ -´Â °ª°ú °ªÀÇ »çÀ̸¦ ÀǹÌÇϸç ^·Î ½ÃÀÛÇÏ¸é ºÎÁ¤À» ÀǹÌÇÑ´Ù.
[qjk] # q ¶Ç´Â j ¶Ç´Â k
[^qjk] # q ¶Ç´Â j ¶Ç´Â k°¡ ¾Æ´Ñ
[a-z] # aºÎÅÍ z±îÁö
[^a-z] # ¼Ò¹®ÀÚ ÀÌ¿ÜÀÇ ¹®ÀÚ
[a-zA-Z] # ¿µ¹® ´ë¼Ò¹®ÀÚ
[a-z]+ # ÇѰ³ ÀÌ»óÀÇ ¼Ò¹®ÀÚ
ÀÌ ½ÃÁ¡¿¡¼ ³¡À¸·Î °Ç³Ê ¶Ù¾îµµ ´ëºÎºÐÀÇ ¿¬½ÀÀ» ÇÒ ¼ö ÀÖ´Ù. ³ª¸ÓÁö´Â ´ëºÎºÐ ÂüÁ¶¸¦ À§ÇÑ °ÍÀÌ´Ù.
¼öÁ÷¸·´ë |´Â "¶Ç´Â"À» Ç¥ÇöÇϸç, µÕ±Ù°ýÈ£ (...)´Â ÆÐÅÏÀ» ¹´Âµ¥ »ç¿ëµÈ´Ù:
jelly|cream # jelly ¶Ç´Â cream
(eg|le)gs # eggs³ª legs
(da)+ # da³ª dada³ª dadadaµî...
´ÙÀ½ Ãß°¡ÀûÀΠƯ¼ö¹®ÀÚµéÀÌ´Ù.
\n # °³Ç๮ÀÚ
\t # ÅÇ
\w # ÀÓÀÇÀÇ ¿µ¹®ÀÚ¿Í ¼ýÀÚ
# [a-zA-Z0-9_]¿Í °°´Ù.
\W # ¿µ¹®ÀÚ¿Í ¼ýÀÚ°¡ ¾Æ´Ñ ¹®ÀÚ
# [^a-zA-Z0-9_]¿Í °°´Ù.
\d # ÀÓÀÇÀÇ ¼ýÀÚ. [0-9]¿Í °°´Ù.
\D # ¼ýÀÚ°¡ ¾Æ´Ñ ¹®ÀÚ. [^0-9]¿Í °°´Ù.
\s # °ø¹é¹®ÀÚ: °ø¹é, ÅÇ, °³Ç๮ÀÚµî
\S # °ø¹éÀÌ ¾Æ´Ñ ¹®ÀÚ
\b # ´Ü¾îÀÇ °æ°è, []¿¡¼´Â »ç¿ëÇÏÁö ¸øÇÑ´Ù.
\B # ´Ü¾î
$, |, [, ), \, /µî°ú °°Àº ¹®ÀÚ´Â ºÐ¸íÈ÷ Á¤±Ô½Ä¿¡¼ °íÀ¯ÇÑ Àǹ̸¦ °®´Â´Ù. ¸¸¾à ÀÌµé ¹®ÀÚÁß Çϳª¸¦ ÀÏÄ¡½ÃŰ·Á¸é ÀÌµé ¹®ÀÚ¾Õ¿¡ ¿ª½½·¡½¬¸¦ µÎ¾î¾ß ÇÑ´Ù.
\| # ¼öÁ÷¸·´ë
\[ # ÁÂÃø ´ë°ýÈ£
\) # ¿ìÃø µÕ±Ù°ýÈ£
\* # º°Ç¥
\^ # ^ ±âÈ£
\/ # ½½·¡½¬
\ # ¿ª½½·¡½¬
Á¤±Ô½ÄÀÇ ¿¹
¾Õ¼ ¾ð±ÞÇÑ °Íó·³ Á¤±Ô½ÄÀ» »ç¿ëÇϴµ¥ ÁÖÀǸ¦ ±â¿ï¿©¾ß ÇÑ´Ù. ¿©±â ¸î¸î ¿¹°¡ ÀÖ´Ù. ÀÏÄ¡¿¡¼ À̵éÀ» »ç¿ëÇϱâÀ§ÇØ /.../·Î °¨½Î¾ß ÇÑ´Ù´Â °ÍÀ» ±â¾ïÇϱ⠹ٶõ´Ù.
[01] # "0" ¶Ç´Â "1"
\/0 # ¿µÀ¸·Î ³ª´©±â: "/0"
\/ 0 # ¿µÀ¸·Î ³ª´©±â(°ø¹éÆ÷ÇÔ): "/ 0"
\/\s0 # ¿µÀ¸·Î ³ª´©±â(°ø¹é¹®ÀÚ Æ÷ÇÔ):
# "/ 0". ¿©±â¼ °ø¹éÀº ÅǵîÀÏ ¼ö ÀÖ´Ù.
\/ *0 # ¿µÀ¸·Î ³ª´©±â(ÇѰ³ÀÌ»óÀÇ °ø¹é Æ÷ÇÔ)
#"/0" ¶Ç´Â "/ 0" ¶Ç´Â "/ 0" µî.
\/\s*0 # ¿µÀ¸·Î ³ª´©±â(ÇѰ³ ÀÌ»óÀÇ °ø¹é¹®ÀÚ Æ÷ÇÔ
\/\s*0\.0* # ÀÌÀü ¿¹¿Í ¸¶Âù°¡Áö ÀÌÁö¸¸ ¼Ò¼öÁ¡À» Æ÷ÇÔÇÑ´Ù.
# ±×¸®°í ¼Ò¼öÁ¡ µÚ¿¡ ¸î°³ÀÇ "0"ÀÌ À̾îÁú ¼ö ÀÖ´Ù.
# "/0.", "/0.0", "/0.00"µî°ú
# "/ 0.", "/ 0.0", "/ 0.00"µîÀÌ Æ÷ÇԵȴÙ.
¿¬½À - ¹æ¸í·Ï
Áö±Ý ±îÁö´Â ¹æ¸í·ÏÀÇ µ¥ÀÌÅͰ¡ µÞ ºÎºÐ¿¡ Ãß°¡µÇ¾ú´Ù. ÀÌÁ¦´Â µÞ ºÎºÐ¿¡ Ãß°¡µÈ ¹æ¸í·ÏÀ» ¾ÕºÎºÎ¿¡ Ãß°¡Çϵµ·Ï guest.cgi¸¦ º¯°æÇϵµ·Ï ÇÏÀÚ.
guestbook.html
»ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ¹æ¸í·Ï ¾ÕºÎºÐ¿¡ Ãß°¡ÇϱâÀ§Çؼ ´ÙÀ½°ú °°ÀÌ guestbook.html ÆÄÀÏÀ» º¯°æÇØ¾ß ÇÑ´Ù.
<html>
<head>
<title>¹æ¸í·Ï</title>
</head>
<body>
<h1>¹æ¸í·Ï</h1>
<!--begin-->
</body>
</html>
guest.cgi
if($FORM{name} ne '' && $FORM{comment} ne '') {
# ¹æ¸í·Ï ÆÄÀÏÀ» Àоî @line¿¡ ÀúÀåÇÑ´Ù.
open(F, "$guestreal");
@line = <F>;
close(F);
# @line¿¡ ¹æ¸í·Ï µ¥ÀÌÅͰ¡ ÀúÀåµÇ¾î ÀÖÀ¸¹Ç·Î ¹æ¸í·Ï ÆÄÀÏÀ» »ý¼º ¸ðµå·Î
# ¿¬´Ù.
open(F, ">$guestreal");
for(0..$#line) {
if($line[$_] =~ /<!--begin-->/) {
# °Ë»öÇÑ ¹®ÀåÁß¿¡ <!--begin-->ÀÌ ÀÖÀ¸¸é ÀÌ ÇàÀº
# <!--begin-->°ú »ç¿ëÀÚ ÀÔ·ÂÀ¸·Î ´ëÄ¡µÈ´Ù.
print F "<!--begin-->\n";
&save_guestbook;
}else {
# °Ë»öÇÑ ¹®ÀåÁß¿¡ <!--begin-->ÀÌ ¾øÀ¸¸é ÀÌ ÇàÀº ¿ø·¡ÀÇ ÇàÀÌ
# ÀúÀåµÈ´Ù.
print F $line[$_];
}
}
close(F);
print "location: $guesturl\n\n";
}else {
print "content-type: text/html\n\n";
&guest_form;
}
µ¿ÀÛ¿ø¸®
À§ÀÇ if¹®Àº <!--begin-->À̶ó´Â ¹®ÀÚ¿À» °Ë»öÇØ¼ <!--begin-->À̶ó´Â ¹®ÀÚ¿ÀÌ °Ë»öµÇ´Â °æ¿ì¿¡´Â ´ÙÀ½ ±×¸²Ã³·³ <!--begin-->À» <!--begin-->°ú »ç¿ëÀÚÀǰßÀ¸·Î ´ëÄ¡ÇϰԵȴÙ. <!--begin-->ÀÌ °Ë»öµÇÁö ¾Ê´Â °æ¿ì¿¡´Â ¿ø·¡ÀÇ ¹®ÀåÀ» ±×´ë·Î ÀúÀåÇϹǷΠ»ç¿ëÀÚÀÇ ÀǰßÀ» ¾ÕºÎºÐ¿¡ Ãß°¡ÇÒ ¼ö ÀÖ´Ù.
<!--begin-->À» Ãâ·ÂÇÒ ¶§ »ç¿ëÀÚÀÇ ÀǰßÀ» ¸ÕÀú Ãâ·ÂÇϰí <!--begin-->À» Ãâ·ÂÇÏ¸é »ç¿ëÀÚÀÇ ÀǰßÀº µÞºÎºÐ¿¡ Ãß°¡µÈ´Ù.