[[TableOfContents]] = ¹ø¿ª¹®¼­Á¤º¸ = == ¿øÀúÀÚ ¹× ¹ø¿ªÀÚ == ¿øÀúÀÚ : Mark Kvale [[br]] ¹ø¿ªÀÚ : redneval@kldp.org == ¿µ¹®¿øº» Ãâó == ¸µÅ© : http://perldoc.perl.org/perlrequick.html [[br]] ºÐ·ù ¹× À̸§ : Perl 5.8.8 documentation - Tutorials - perlrequick == ÀúÀÛ±Ç ¹× ¶óÀ̼¾½º == º» ¹ø¿ª¹®¼­ÀÇ ¹ø¿ªºÎºÐ¿¡ ÇØ´çµÇ´Â ºÎºÐÀÇ ¿ø ÀúÀÛ±ÇÀº redneval@kldp.org ¿¡ ÀÖ´Ù. ´Ù¸¸, ÀúÀ۱ǿ¡ µû¸¥ ¸ðµç ±Ç¸®´Â Free Software Foundation (FSF) ·Î À̾çÇÑ´Ù. º» ¹ø¿ª¹®¼­´Â ¿µ¹® perlrequickÀÇ ¶óÀ̼¾½º¿¡ µû¶ó GPLÀ» µû¸¥´Ù. ±×·¯¹Ç·Î, º» ¹ø¿ª¹®¼­ÀÇ GPL¹öÀüÀº ¿µ¹® perlrequickÀÇ GPL¹öÀüÀ» µû¸¥´Ù. ¸¸¾à, ¿µ¹® perlrequickÀÇ GPL¹öÀüÀÌ ¹Ù²î¸é, º» ¹ø¿ª¹®¼­ ¶ÇÇÑ ±× ¹Ù²ï ¹öÀüÀ¸·Î ¹Ù²ã¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. == ¸µÅ© == ÆÞ¿¡ °üÇÑ ´Ù¸¥ ¹®¼­¸¦ º¸°í ½Í´Ù¸é [perldoc]À» Âü°íÇ϶ó. = ¹ø¿ª¹®¼­ = == À̸§ == perlrequick - ÆÞ Á¤±ÔÇ¥Çö½Ä ºü¸£°Ô ½ÃÀÛÇϱâ == ¼³¸í == º» ÆäÀÌÁö´Â, ÆÞ¿¡¼­ Á¤±ÔÇ¥Çö½ÄÀ» ÀÌÇØÇÏ°í ÀÛ¼ºÇÏ°í »ç¿ëÇϴµ¥ ÇÊ¿äÇÑ °¡Àå ±âÃÊÀûÀÎ ³»¿ëÀ» ´Ù·é´Ù. === ´Ü¾î¼³¸í === * ¸ÅÄ¡(match): properÇÑ ÇÑ±Û ´ë¿ª¾î¸¦ ãÀ» ¼ö ¾ø¾ú´Ù. * ±¸ºÐÀÚ(delimiter) * ¸ÞŸ¹®ÀÚ(metacharacter) * escaped character: ÇÑ±Û ´ë¿ª¾î¿¡ ´ëÇØ ³í¶õÀÌ ÀÖ´Ù. http://kldp.org/node/76662 * anchor ¸ÞŸ¹®ÀÚ, ´Ü¾î anchor: anchorÀÇ ¶æÀº ´éÀÌ´Ù. ^, $, \b°¡ ¸¶Ä¡ ¹èÀÇ ´é°ú °°ÀÌ À§Ä¡¸¦ °íÁ¤½ÃÄÑÁشٴ ÀǹÌÀÌ´Ù. * ¼ö½Ä¾î(modifier): 'º¯°æÀÚ'·Î ¹ø¿ªÇÒ ¼ö ÀÖÁö¸¸, ÆÞÀÇ ¹®ÇÐÀû Ư¼ºÀ» °í·ÁÇÏ¿© '¼ö½Ä¾î'·Î ¹ø¿ªÇÏ¿´´Ù. ¸¶Âù°¡Áö ÀÌÀ¯·Î '¼ö·®Çü¿ë»ç(quantifier)'´Â '¼ö·®Áö½ÃÀÚ'·Î ¹ø¿ªÇÏÁö ¾Ê°Ú´Ù. * double quoted ¹®ÀÚ¿­, single quoted ¹®ÀÚ¿­: FIX_ME === ´Ü¼ø ´Ü¾î ¸ÅÄ¡ === Á¤±ÔÇ¥Çö½Ä¿¡¼­ °¡Àå °£´ÜÇÑ °æ¿ì´Â ´Ü¼øÇÑ ´Ü¾î ¶Ç´Â ¹®ÀÚ¿­À» ã´Â °æ¿ìÀÌ´Ù. ´Ü¾î Çϳª·Î ±¸¼ºµÈ Á¤±ÔÇ¥Çö½ÄÀº, ±× ´Ü¾î¸¦ Æ÷ÇÔÇÑ ¸ðµç ¹®ÀÚ¿­¿¡ ´ëÇؼ­ ¸ÅÄ¡µÈ´Ù. {{{#!vim perl "Hello World" =~ /World/; # matches }}} ÀÌ ½ÇÇ๮¿¡¼­ "World"´Â Á¤±ÔÇ¥Çö½ÄÀÌ°í, "/World/"´Â "World"¸¦ Æ÷ÇÔÇÑ ¹®ÀÚ¿­À» ãÀ¸¶ó´Â °ÍÀ» ÀǹÌÇÑ´Ù. =~ ¿¬»êÀÚ´Â Á¤±ÔÇ¥Çö½Ä°ú // ¿¬»êÀÚ¿Í ÇÔ²² ÀÛ¿ëÇÏ¿©, Áº¯ÀÇ ¹®ÀÚ¿­ÀÌ Á¤±ÔÇ¥Çö½Ä¿¡ ¸ÅÄ¡µÇ¸é Âü°ªÀ» ¹ÝȯÇÏ°Ô µÈ´Ù. ¸¸¾à ¸ÅÄ¡°¡ µÇÁö ¾ÊÀ¸¸é °ÅÁþ°ªÀ» ¹ÝȯÇÏ°Ô µÈ´Ù. À§ÀÇ °æ¿ì¿¡´Â "World"¹®ÀÚ¿­Àº "Hello World"¹®ÀÚ¿­¿¡ Á¸ÀçÇϹǷΠÀ§ÀÇ Ç¥Çö½ÄÀº Âü°ªÀ» °®´Â´Ù. À̸¦ ÀÀ¿ëÇÏ¿© ´ÙÀ½°ú °°ÀÌ ÇÒ ¼ö ÀÖ´Ù. ù¹ø°·Î´Â, ´ÙÀ½°ú °°ÀÌ Á¶°Ç¹®À¸·Î »ç¿ëÇÒ ¼ö ÀÕ´Ù. {{{#!vim perl print "It matches\n" if "Hello World" =~ /World/; }}} !~ ¿¬»êÀÚ´Â =~ ¿¬»êÀÚÀÇ ¹Ý´ëÀǹ̷Π»ç¿ëµÈ´Ù. {{{#!vim perl print "It doesn't match\n" if "Hello World" !~ /World/; }}} Á¤±ÔÇ¥Çö½ÄÀÇ ÀϺηΠº¯¼ö¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. {{{#!vim perl $greeting = "World"; print "It matches\n" if "Hello World" =~ /$greeting/; }}} ¸¸¾à $_¿¡ ´ëÇؼ­ ¸ÅÄ¡ÇÏ´Â °æ¿ì´Â "$_ =~" ºÎºÐÀ» »ý·«ÇÒ ¼ö ÀÖ´Ù. {{{#!vim perl $_ = "Hello World"; print "It matches\n" if /World/; }}} ¸¶Áö¸·À¸·Î, ±âº» ±¸ºÐÀÚ·Î »ç¿ëµÇ´Â //´ë½Å¿¡ ´Ù¸¥ ÀÓÀÇÀÇ ¹®ÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì´Â ¾Õ¿¡ 'm'À» ºÙ¿©Áà¾ß ÇÑ´Ù. {{{#!vim perl "Hello World" =~ m!World!; # matches, delimited by '!' "Hello World" =~ m{World}; # matches, note the matching '{}' "/usr/bin/perl" =~ m"/perl"; # matches after '/usr/bin', # '/' becomes an ordinary char }}} Âü°ªÀ» °¡Áö·Á¸é, Á¤±ÔÇ¥Çö½ÄÀÌ ¹®ÀÚ¿­ÀÇ ÀÏºÎ¿Í Á¤È®È÷ ÀÏÄ¡ÇؾßÇÑ´Ù. {{{#!vim perl "Hello World" =~ /world/; # ±âº»ÀûÀ¸·Î Á¤±ÔÇ¥Çö½ÄÀº ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇϹǷÎ, ÀÌ °æ¿ì´Â ¸ÅÄ¡µÇÁö ¾Ê´Â´Ù. }}} {{{#!vim perl "Hello World" =~ /o W/; # °ø¹é¹®ÀÚ ' 'µµ ¶ÇÇÑ ¹®ÀÚ·Î Ãë±ÞµÇ¹Ç·Î, ÀÌ °æ¿ì´Â ¸ÅÄ¡µÈ´Ù. }}} {{{#!vim perl "Hello World" =~ /World /; # "Hello World"ÀÇ ³¡¿¡ °ø¹é¹®ÀÚ ' '°¡ ¾øÀ¸¹Ç·Î ¸ÅÄ¡µÇÁö ¾Ê´Â´Ù. }}} Á¤±Ô½ÄÀº ¸ÅÄ¡ °¡´ÉÇÑ °¡Àå ¾ÕºÎºÐ¿¡¼­ ¸ÅÄ¡µÈ´Ù. {{{#!vim perl "Hello World" =~ /o/; # matches 'o' in 'Hello' "That hat is red" =~ /hat/; # matches 'hat' in 'That' }}} ¸ðµç ¹®ÀÚ°¡ ¹®ÀÚ±×´ë·ÎÀÇ ¸ÅÄ¡·Î »ç¿ëµÇ´Â °ÍÀº ¾Æ´Ï´Ù. ¸ÞŸ¹®ÀÚ¶ó°í ºÒ¸®´Â ¸î¸î ¹®ÀÚµéÀº Á¤±ÔÇ¥Çö½ÄÀÇ Æ¯¼ö±¸¹®À» À§ÇØ »ç¿ëµÈ´Ù. ¸ÞŸ¹®ÀÚ´Â {{{ {}[]()^$.|*+?\ }}} ÀÌ ÀÖÀ¸¸ç, ¿ª½½·¡½¬ '\' µÚ¿¡ ¾²°Ô µÇ¸é ¹®ÀÚ±×´ë·ÎÀÇ ¸ÅÄ¡¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. {{{#!vim perl "2+2=4" =~ /2+2/; # doesn't match, + is a metacharacter "2+2=4" =~ /2\+2/; # matches, \+ is treated like an ordinary + 'C:\WIN32' =~ /C:\\WIN/; # matches "/usr/bin/perl" =~ /\/usr\/bin\/perl/; # matches }}} À§ÀÇ ¸¶Áö¸· Á¤±ÔÇ¥Çö½ÄÀ» º¸¸é, ½½·¡½¬ '/' ¾Õ¿¡µµ ¿ª½½·¡½¬¸¦ ºÙ¿©Áà¾ß Çϴµ¥, ±× ÀÌÀ¯´Â ½½·¡½¬ ¹®ÀÚ°¡ Á¤±ÔÇ¥Çö½ÄÀÇ ±¸ºÐÀÚ·Î »ç¿ëµÆ±â ¶§¹®ÀÌ´Ù. ASCII¹®ÀÚ Áß¿¡¼­ escaped character¶ó°í ºÒ¸®´Â ¹®ÀÚµéÀº '\' ¹®ÀÚ¸¦ »ç¿ëÇÏ¿© ³ªÅ¸³¾ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é, Åǹ®ÀÚ´Â \t, ÁٹٲÞÀ» À§ÇØ »ç¿ëµÇ´Â newline°ú carriage returnÀº °¢°¢ \n ¿Í \r ·Î ³ªÅ¸³¾ ¼ö ÀÖ´Ù. \·Î ½ÃÀÛÇÏ´Â ¼ýÀÚ´Â 8Áø¼ö¸¦ ³ªÅ¸³»°í, \x·Î ½ÃÀÛÇϸé 16Áø¼ö¸¦ ³ªÅ¸³¾ ¼ö ÀÖ´Ù. (¿¹¸¦ µé¸é, \033 Àº 8Áø¼ö 33ÀÌ°í \x1B ´Â 16Áø¼ö 1BÀÌ´Ù.) {{{#!vim perl "1000\t2000" =~ m(0\t2) # matches "cat" =~ /\143\x61\x74/ # matches, but a weird way to spell cat }}} Á¤±ÔÇ¥Çö½ÄÀº ÀϹÝÀûÀÎ double quoted ¹®ÀÚ¿­°ú ¸¶Âù°¡Áö·Î Ãë±ÞµÈ´Ù. ±×·¯¹Ç·Î Á¤±ÔÇ¥Çö½ÄÀÇ ÀϺηΠº¯¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. {{{#!vim perl $foo = 'house'; 'cathouse' =~ /cat$foo/; # matches 'housecat' =~ /${foo}cat/; # matches }}} À§¿¡¼­ »ìÆ캻 ¸ðµç Á¤±ÔÇ¥Çö½ÄµéÀ» »ìÆ캸¸é, Á¤±ÔÇ¥Çö½ÄÀº ¹®ÀÚ¿­ÀÇ À§Ä¡¿¡ »ó°ü¾øÀÌ ¸ÅÄ¡µÊÀ» ¾Ë ¼ö ÀÖ´Ù. À§Ä¡¸¦ ÁöÁ¤Çϱâ À§Çؼ­ anchor ¸ÞŸ¹®ÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ^ ´Â ¹®ÀÚ¿­ÀÇ Ã³À½À» ÁöÁ¤ÇÏ°í, $ ´Â ¹®ÀÚ¿­ÀÇ ³¡ ¶Ç´Â \n¹®ÀÚÀÇ ¹Ù·Î ¾ÕÀ» ÁöÁ¤ÇÑ´Ù. {{{#!vim perl "housekeeper" =~ /keeper/; # matches "housekeeper" =~ /^keeper/; # doesn't match "housekeeper" =~ /keeper$/; # matches "housekeeper\n" =~ /keeper$/; # matches "housekeeper" =~ /^housekeeper$/; # matches }}} === ¹®ÀÚ ÁýÇÕ === Á¤±ÔÇ¥Çö½ÄÀÇ ÇÑ ºÎºÐÀ» Ç¥ÇöÇϴµ¥ À־, ÇϳªÀÇ ¹®ÀÚ¸¦ »ç¿ëÇÏ´Â °Í ´ë½Å¿¡, ¸ÅÄ¡ °¡´ÉÇÑ ¹®ÀÚµéÀ» ³ª¿­ÇÏ´Â ¹æ½ÄÀ¸·Î ¹®ÀÚ ÁýÇÕÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ³ª¿­µÈ ¹®ÀÚµéÀ» ´ë°ýÈ£·Î µÑ·¯½Î´Â °ÍÀ¸·Î ¹®ÀÚ ÁýÇÕÀÓÀ» ³ªÅ¸³½´Ù. ´ÙÀ½ÀÇ ¿¹¸¦ º¸ÀÚ. {{{#!vim perl /cat/; # matches 'cat' /[bcr]at/; # matches 'bat', 'cat', or 'rat' "abc" =~ /[cab]/; # matches 'a' }}} ¸¶Áö¸· ½ÇÇ๮À» »ìÆ캸ÀÚ. Á¤±ÔÇ¥Çö½Ä »óÀÇ ¹®ÀÚ ÁýÇÕÀÇ Ã¹¹ø° ¹®ÀÚ´Â 'c' ¿´À½¿¡µµ, Á¤±ÔÇ¥Çö½ÄÀÌ ¸ÅÄ¡ÇÏ´Â °ÍÀº 'c'°¡ ¾Æ´Ñ 'a'°¡ µÈ´Ù. {{{#!vim perl /[yY][eE][sS]/; # match 'yes' in a case-insensitive way # 'yes', 'Yes', 'YES', etc. /yes/i; # also match 'yes' in a case-insensitive way }}} ¸¶Áö¸·¿¡ µç ¿¹¿¡¼­´Â, ¼ö½Ä¾î 'i'¸¦ »ç¿ëÇÔÀ¸·Î½á ´ë¼Ò¹®ÀÚ ±¸ºÐÀ» ÇÏÁö ¾Êµµ·Ï ¸¸µé¾ú´Ù. ¹®ÀÚ ÁýÇÕ ³»¿¡¼­ ¹®ÀÚ¸¦ ¾µ ¶§µµ ¿ª½Ã Ư¼ö¹®ÀÚ´Â ¾Õ¿¡¼­ ¾ð±ÞÇÑ ¹æ½ÄÀ¸·Î »ç¿ëÇØ¾ß ÇÑ´Ù. ±×·±µ¥ ¹®ÀÚ ÁýÇÕ ³»¿¡¼­´Â Ãß°¡ÀûÀ¸·Î -]\^$ °¡ Ư¼ö¹®ÀÚ°¡ µÇ¹Ç·Î À̸¦ »ç¿ëÇϱâ À§Çؼ­´Â ¿ª½½·¡½¬¸¦ ¾Õ¿¡ ºÙ¿©¾ß ÇÑ´Ù. {{{#!vim perl /[\]c]def/; # matches ']def' or 'cdef' $x = 'bcr'; /[$x]at/; # matches 'bat, 'cat', or 'rat' /[\$x]at/; # matches '$at' or 'xat' /[\\$x]at/; # matches '\at', 'bat, 'cat', or 'rat' }}} ¹®ÀÚ ÁýÇÕ ³»ÀÇ Æ¯¼ö¹®ÀÚ '-'´Â ¹üÀ§ ¿¬»êÀÚó·³ ÀÛ¿ëÇÑ´Ù. ±×·¯¹Ç·Î ´Ü¼øÇÑ ¹æ½ÄÀÎ `[`0123456789`]` ¿Í `[`abc...xyz`]` ´ë½Å¿¡, ¿ì¾ÆÇÑ ¹æ½ÄÀÎ `[`0-9`]` ¿Í `[`a-z`]` À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. {{{#!vim perl /item[0-9]/; # matches 'item0' or ... or 'item9' /[0-9a-fA-F]/; # matches a hexadecimal digit }}} ¸¸¾à '-'¹®ÀÚ°¡ ¹®ÀÚ ÁýÇÕÀÇ Ã¹ ¹®ÀÚ³ª ¸¶Áö¸· ¹®ÀÚ·Î »ç¿ëµÇ¸é, Ư¼ö¹®ÀÚ°¡ ¾Æ´Ñ ¹®ÀÚ±×´ë·ÎÀÇ Àǹ̸¦ °®´Â´Ù. ¹®ÀÚ ÁýÇÕÀÇ Ã¹¹ø° À§Ä¡¿¡ '^'¹®ÀÚ°¡ ÀÖÀ¸¸é À̴ Ư¼ö¹®ÀÚÀ̸ç, ÀÌ´Â ¹®ÀÚ ÁýÇÕ¿¡ ¹Ý´ëÀÇ Àǹ̸¦ °®°Ô ÇÑ´Ù. Áï, ¹®ÀÚ ÁýÇÕ³»¿¡ ¾ø´Â ¸ðµç ¹®ÀÚ¸¦ ¸ÅÄ¡ÇÑ´Ù. `[`...`]` ¿Í `[`^...`]`´Â µÑ ´Ù ÇϳªÀÇ ¹®ÀÚ¿¡ ¸ÅÄ¡µÇ¸ç, ±×·¸Áö ¾ÊÀ¸¸é ¸ÅÄ¡´Â ½ÇÆÐÇÑ´Ù. {{{#!vim perl /[^a]at/; # doesn't match 'aat' or 'at', but matches # all other 'bat', 'cat, '0at', '%at', etc. /[^0-9]/; # matches a non-numeric character /[a^]at/; # matches 'aat' or '^at'; here '^' is ordinary }}} ÆÞÀº ÀϹÝÀûÀ¸·Î ¸¹ÀÌ ¾²ÀÌ´Â ¸î°¡Áö ¹®ÀÚ ÁýÇÕ¿¡ ´ëÇؼ­ ¾à¾î¸¦ °¡Áö°í ÀÖ´Ù. * \d ´Â ¼ýÀÚ¸¦ ³ªÅ¸³½´Ù. Áï, ´ÙÀ½°ú °°´Ù. * \d {{{ [0-9] }}} * \s ´Â °ø¹é¹®ÀÚ¸¦ ³ªÅ¸³½´Ù. {{{ [\ \t\r\n\f] }}} * \w ´Â '_'¿Í ¾ËÆĺªÀ» ³ªÅ¸³½´Ù. {{{ [0-9a-zA-Z_] }}} * \D ´Â \d ÀÇ ¹Ý´ëÀÌ´Ù. {{{ [^0-9] }}} * \S ´Â \s ÀÇ ¹Ý´ëÀÌ´Ù. {{{ [^\s] }}} * \W ´Â \w ÀÇ ¹Ý´ëÀÌ´Ù. {{{ [^\w] }}} * ¸¶Ä§Ç¥ '.' ´Â "\n"¸¦ Á¦¿ÜÇÑ ¸ðµç ¹®ÀÚ¿¡ ¸ÅÄ¡µÈ´Ù. ¾à¾î \d\s\w\D\S\W ´Â ¹®ÀÚÁýÇÕ ¾È°ú ¹Û¿¡¼­ ¾²ÀÏ ¼ö ÀÖ´Ù. {{{#!vim perl /\d\d:\d\d:\d\d/; # matches a hh:mm:ss time format /[\d\s]/; # matches any digit or whitespace character /\w\W\w/; # matches a word char, followed by a # non-word char, followed by a word char /..rt/; # matches any two chars, followed by 'rt' /end\./; # matches 'end.' /end[.]/; # same thing, matches 'end.' }}} ´Ü¾î anchor \b´Â \w¿Í \WÀÇ °æ°è¿¡ ¸ÅÄ¡µÈ´Ù. (Áï, ´Ü¾îÀÇ °æ°è¿¡ ¸ÅÄ¡µÈ´Ù.) {{{#!vim perl $x = "Housecat catenates house and cat"; $x =~ /\bcat/; # matches cat in 'catenates' $x =~ /cat\b/; # matches cat in 'housecat' $x =~ /\bcat\b/; # matches 'cat' at end of string }}} ¸¶Áö¸· ¿¹¿¡¼­ º¸¸é, ¹®ÀÚ¿­ÀÇ ³¡ ¶ÇÇÑ ´Ü¾îÀÇ °æ°è·Î °£ÁֵǴ °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. === ¸ÞŸ¹®ÀÚ '|' === ¾Õ¿¡¼­´Â ¹®ÀÚ ÁýÇÕÀ» ´Ù·ð´Âµ¥, À̹ø¿¡´Â ¹®ÀÚ¿­¿¡ ´ëÇؼ­ ºñ½ÁÇÏ°Ô, ÇϳªÀÇ ¹®ÀÚ¿­ ´ë½Å¿¡ ¸ÅÄ¡ °¡´ÉÇÑ ¹®ÀÚ¿­(È帶ó°í ºÎ¸£°Ú´Ù.)À» ³ª¿­ÇÏ´Â ¹æ½ÄÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î dog ¶Ç´Â cat À» ¸ÅÄ¡ÇÏ°í ½Í´Ù¸é Á¤±ÔÇ¥Çö½Ä dog|cat ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Èĺ¸ Áß¿¡¼­ ¸ÕÀú ÀÖ´Â È常¦ ¿ì¼±ÀûÀ¸·Î ¸ÅÄ¡ÇÏ°Ô µÈ´Ù. Áï, dog°¡ ¸ÅÄ¡µÇÁö ¾ÊÀº °æ¿ì¿¡ ±× ´ÙÀ½ Èĺ¸ÀÎ cat°¡ ¸ÅÄ¡µÇ´ÂÁö¸¦ »ìÇÇ°Ô µÈ´Ù. ¸¸¾à catµµ ¸ÅÄ¡°¡ µÇÁö ¾ÊÀ¸¸é, ¸ÅÄ¡´Â ½ÇÆÐÇÏ°í ¹®ÀÚ¿­ÀÇ ´ÙÀ½ À§Ä¡¿¡¼­ ´Ù½Ã ¸ÅÄ¡¸¦ ½ÃµµÇÑ´Ù. ¿¹¸¦ ÇÑ ¹ø º¸ÀÚ. {{{#!vim perl "cats and dogs" =~ /cat|dog|bird/; # matches "cat" "cats and dogs" =~ /dog|cat|bird/; # matches "cat" }}} µÎ¹ø° Á¤±ÔÇ¥Çö½ÄÀ» º¸ÀÚ. dog°¡ ù¹ø° Èĺ¸ À̱â´Â ÇÏÁö¸¸, ¹®ÀÚ¿­ "cats and dogs"¿¡ ´ëÇؼ­´Â cat°¡ ¸ÕÀú ¸ÅÄ¡µÇ°Ô µÈ´Ù. {{{#!vim perl "cats" =~ /c|ca|cat|cats/; # matches "c" "cats" =~ /cats|cat|ca|c/; # matches "cats" }}} ¸ÅÄ¡µÇ´Â ¹®ÀÚ¿­ÀÇ À§Ä¡°¡ °°Àº °æ¿ì´Â ¾Õ¿¡ ÀÖ´Â È帰¡ ¿ì¼±ÀûÀ¸·Î ¸ÅÄ¡µÈ´Ù. ±×·¯¹Ç·Î À§ÀÇ ¿¹¿Í°°ÀÌ ¸ðµç È帰¡ ¸ÅÄ¡µÇ´Â °æ¿ì¿¡´Â ù¹ø° È帰¡ ¸ÅÄ¡µÈ´Ù. === ±×·ì°ú Áßø±¸Á¶ === ±×·ì ¸ÞŸ¹®ÀÚÀÎ ()´Â Á¤±ÔÇ¥Çö½ÄÀÇ ÀϺκÐÀ» ÇϳªÀÇ À¯´ÖÀ¸·Î ´Ù·ç°Ô ÇØÁØ´Ù. À̸¦ "±×·ìÀ¸·Î ¸¸µç´Ù"°í Çϸç, Á¤±ÔÇ¥Çö½Ä¿¡¼­ ()À¸·Î µÑ·¯½ÓÀ¸·Î½á ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, house(cat|keeper)´Â houseµÚ¿¡ cat ¶Ç´Â keeper°¡ ¿À´Â ¹®ÀÚ¿­À» ¸ÅÄ¡ÇÑ´Ù. {{{#!vim perl /(a|b)b/; # matches 'ab' or 'bb' /(^a|b)c/; # matches 'ac' at start of string or 'bc' anywhere /house(cat|)/; # matches either 'housecat' or 'house' /house(cat(s|)|)/; # matches either 'housecats' or 'housecat' or # 'house'. Note groups can be nested. "20" =~ /(19|20|)\d\d/; # matches the null alternative '()\d\d', # because '20\d\d' can't match }}} === ¸ÅÄ¡µÈ ¹®ÀÚ¿­¿¡¼­ ÃßÃâÇϱâ === ±×·ì ¸ÞŸ¹®ÀÚ ()¸¦ ÀÌ¿ëÇÏ¸é ¸ÅÄ¡µÈ ¹®ÀÚ¿­¿¡¼­ ÃßÃâÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. °¢°¢ÀÇ ±×·ì¿¡ ¸ÅÄ¡µÈ ¹®ÀÚ¿­µéÀº Ư¼öº¯¼ö $1, $2, ... µîÀ¸·Î ¼ø¼­´ë·Î ÀúÀåµÈ´Ù. ÀÌ Æ¯¼öº¯¼öµéÀº ´Ù¸¥ ÀÏ¹Ý º¯¼ö°ú °°Àº ¹æ½ÄÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. {{{#!vim perl # extract hours, minutes, seconds $time =~ /(\d\d):(\d\d):(\d\d)/; # match hh:mm:ss format $hours = $1; $minutes = $2; $seconds = $3; }}} ±×·ìÀÌ »ç¿ëµÈ Á¤±ÔÇ¥Çö½Ä /regex/Àº, ¸®½ºÆ®·Î ´Ù·ïÁú °æ¿ì¿¡ ($1,$2,...) ÀÇ °ªÀ» ¹ÝȯÇÏ°Ô µÈ´Ù. ±×·¯¹Ç·Î À§ÀÇ ¿¹Á¦´Â ´ÙÀ½°ú °°ÀÌ ¹Ù²ã¾µ ¼ö ÀÖ´Ù. {{{#!vim perl ($hours, $minutes, $second) = ($time =~ /(\d\d):(\d\d):(\d\d)/); }}} ¸¸¾à Á¤±ÔÇ¥Çö½ÄÀÌ ÁßøµÇ´Â °æ¿ì, $1Àº °¡Àå ¿ÞÂÊÀÇ ( ¹®ÀÚ·Î ÁöÁ¤µÈ ±×·ì, $2´Â µÎ ¹øÀç·Î ¿ÞÂÊ¿¡ À§Ä¡ÇÑ ( ¹®ÀÚ·Î ÁöÁ¤µÈ ±×·ì¿¡ ÀÇÇØ ¹®ÀÚ¿­ÀÌ ÀúÀåµÇ°Ô µÈ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½°ú °°ÀÌ Á¤±ÔÇ¥Çö½ÄÀÌ ÀÖÀ» ¶§ °¢°¢ÀÇ ±×·ì¿¡ ÇÒ´çµÇ´Â Ư¼öº¯¼öÀÇ ¹øÈ£´Â ±× ¾Æ·¡¿¡ Àû¾î ³õ¾Ò´Ù. {{{#!vim perl /(ab(cd|ef)((gi)|j))/; 1 2 34 }}} '¿ªÂüÁ¶ÀÚ'·Î ºÒ¸®´Â \1 , \2 , ... µéÀº, Á¤±ÔÇ¥Çö½Ä ³»¿¡¼­ $1 , $2 , ... °ú °°Àº ¿ªÇÒÀ» ÇÏ°Ô µÈ´Ù. {{{#!vim perl /(\w\w\w)\s\1/; # find sequences like 'the the' in string }}} $1 , $2 , ... ´Â Á¤±ÔÇ¥Çö½ÄÀÇ ¹Û¿¡¼­¸¸ ¾²¿©¾ß ÇÏ°í, \1 , \2 , ... ´Â Á¤±ÔÇ¥Çö½Ä ¾È¿¡¼­¸¸ ¾²¿©¾ß ÇÑ´Ù. === ¹Ýº¹ ¸ÅÄ¡ === Á¤±ÔÇ¥Çö½ÄÀÇ ÇÑ ºÎºÐÀ» ¿øÇÏ´Â ¼ö¸¸Å­ ¹Ýº¹Çϱâ À§Çؼ­, ¼ö·® ¸ÞŸ¹®ÀÚ(¶Ç´Â ¼ö·®Çü¿ë»ç) ?, * , + , {} ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¼ö·®Çü¿ë»ç´Â ¹®ÀÚ, ¹®ÀÚ ÁýÇÕ, ±×·ìÀÇ ¹Ù·Î µÚ¿¡ ¿Ã ¼ö ÀÖ´Ù. ±×µéÀÇ Àǹ̴ ´ÙÀ½°ú °°´Ù. * a{n,m} : ÃÖ¼Ò n¹øÀÌ»ó ÃÖ´ë m¹øÀÌÇÏ ¸ÅÄ¡ÇÑ´Ù. * a{n,} : ÃÖ¼Ò n¹øÀÌ»ó ¸ÅÄ¡ÇÑ´Ù. * a{n} : Á¤È®È÷ n¹ø ¸ÅÄ¡ÇÑ´Ù. * a? : a{0,1} ¿Í °°´Ù. * a* : a{0,} ¿Í °°´Ù. * a+ : a{1,} ¿Í °°´Ù. ¿¹¸¦ Çѹø º¸ÀÚ. {{{#!vim perl /[a-z]+\s+\d*/; # match a lowercase word, at least some space, and # any number of digits /(\w+)\s+\1/; # match doubled words of arbitrary length $year =~ /\d{2,4}/; # make sure year is at least 2 but not more # than 4 digits $year =~ /\d{4}|\d{2}/; # better match; throw out 3 digit dates }}} ¼ö·®Çü¿ë»ç´Â ¸ÅÄ¡µÉ ¼ö ÀÖ´ÂÇÑ ÃÖ´ëÇÑ ¸¹Àº Ƚ¼ö¸¦ ¸ÅÄ¡ÇÏ´Â ¹æ½ÄÀ¸·Î ÀÛµ¿ÇÑ´Ù. ±×·¯¹Ç·Î, {{{#!vim perl $x = 'the cat in the hat'; $x =~ /^(.*)(at)(.*)$/; # matches, # $1 = 'the cat in the h' # $2 = 'at' # $3 = '' (0 matches) }}} ù¹ø° ¼ö·®Çü¿ë»ç°¡ ÀÖ´Â (.*) ºÎºÐÀº ÃÖ´ëÇÑ ¸¹Àº ¹®ÀÚ¿­À» °¡Áö·Á°í Çϱ⠶§¹®¿¡ 'the c'¿¡¼­ ¸ÅÄ¡µÇ°í ³¡³ª´Â °ÍÀÌ ¾Æ´Ï¶ó 'the cat in the h'±îÁö ¸ÅÄ¡µÈ´Ù. ±×·¯¹Ç·Î µÎ¹ø° (.*)ºÎºÐÀº ¾Æ¹«·± ¹®ÀÚ¿­µµ °¡ÁöÁö ¸øÇÑ´Ù. Áï, 0¹ø ¸ÅÄ¡µÈ´Ù. ¸ÅÄ¡ ¿¬»êÀÚ¿¡ ´ëÇØ ¾Ë¾Æ¾ßÇÒ »çÇ×ÀÌ ¸î °¡Áö ´õ Àִµ¥, {{{#!vim perl $pattern = 'Seuss'; while (<>) { print if /$pattern/; } }}} À§ÀÇ Äڵ忡¼­ ¸Å ·çÇÁ¸¶´Ù $patternÀÌ Àç°è»êµÈ´Ù. ¸¸¾à $pattern°ªÀÌ ¾È ¹Ù²î¾î¼­ Àç°è»êÀÌ ÇÊ¿ä¾ø´Ù¸é, //o ¼ö½Ä¾î¸¦ »ç¿ëÇ϶ó. ÀÌ °æ¿ì $patternÀº Çѹø¸¸ ´ëÀԵȴÙ. ¸¸¾à º¯¼ö°¡ ´ëÀԵǴ °ÍÀ» ¸·°í ½Í´Ù¸é, Ư¼ö ±¸ºÐÀÚ `m''` À» »ç¿ëÇ϶ó. ±×·¯¸é À̸¦ ¹®ÀÚ ±×´ë·Î Çؼ®ÇÏ°Ô µÈ´Ù. {{{#!vim perl @pattern = ('Seuss'); m/@pattern/; # matches 'Seuss' m'@pattern'; # matches the literal string '@pattern' }}} Àü¿ª ¼ö½Ä¾î //g¸¦ »ç¿ëÇÏ¸é ¿øÇÏ´Â ¸¸Å­ ¸¹Àº Ƚ¼ö¸¦ ¸ÅÄ¡ÇÒ ¼ö ÀÖ´Ù. ±×·± ½ÄÀ¸·Î ¿¬¼ÓÀûÀ¸·Î ¸ÅÄ¡°¡ ÀÌ·ïÁö¸é, ¸ÅÄ¡°¡ ÇÑ ¹ø¾¿ ÀÌ·ïÁú ¶§¸¶´Ù, ¸ÅÄ¡ Æ÷ÀÎÆ®°¡ ´ÙÀ½ À§Ä¡·Î À̵¿ÇÏ°Ô µÈ´Ù. ¸¸¾à ÀÌ À§Ä¡µéÀ» ¾Ë°í ½Í´Ù¸é pos() ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ¿¹¸¦µé¾î {{{#!vim perl $x = "cat dog house"; # 3 words while ($x =~ /(\w+)/g) { print "Word is $1, ends at position ", pos $x, "\n"; } }}} À§ÀÇ ÄÚµå´Â ´ÙÀ½°ú °°Àº Ãâ·Â°á°ú¸¦ ¾ò´Â´Ù. {{{ Word is cat, ends at position 3 Word is dog, ends at position 7 Word is house, ends at position 13 }}} ¸ÅÄ¡°¡ ½ÇÆÐÇϰųª Á¤±ÔÇ¥Çö½Ä ¿¬»êÀ» ´Ù¸¥ ¹®ÀÚ¿­¿¡ Àû¿ëÇÏ´Â °æ¿ì, posÇÔ¼ö¿¡ ÀÇÇÑ °ªÀº ÃʱâÈ­°¡ µÈ´Ù. ¸ÅÄ¡°¡ ½ÇÆÐÇÒ ¶§ ÃʱâÈ­µÇ´Â °ÍÀ» ¸·À¸·Á¸é //c ¼ö½Ä¾î¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ¿¹¸¦ µé¸é, /regex/gc ·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. //g ¿¬»êÀÚ¸¦ ¸®½ºÆ®·Î ´Ù·ç¸é, //g ´Â ¸ÅÄ¡µÈ ±×·ìÀÇ ¸®½ºÆ®¸¦ ¹ÝȯÇÑ´Ù. ¸¸¾à ±×·ìÀÌ Çϳªµµ ¾ø´Ù¸é, Á¤±ÔÇ¥Çö½Ä Àüü¿¡ ÀÇÇØ ¸ÅÄ¡µÈ ºÎºÐÀÇ ¸®½ºÆ®¸¦ ¹ÝȯÇÑ´Ù. {{{#!vim perl @words = ($x =~ /(\w+)/g); # matches, # $word[0] = 'cat' # $word[1] = 'dog' # $word[2] = 'house' }}} === ã¾Æ¹Ù²Ù±â === ã¾Æ¹Ù²Ù±â´Â s/regex/replacement/modifiers ¿Í °°Àº½ÄÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. replacement´Â ÆÞÀÇ ¹®ÀÚ¿­À» ¾²¸é µÈ´Ù. Á¤±ÔÇ¥Çö½Ä¿¡ ÀÇÇØ ¸ÅÄ¡µÈ ºÎºÐÀº replacement·Î ´ëüµÈ´Ù. =~ ¿¬»êÀÚµµ ¶ÇÇÑ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¶Âù°¡Áö·Î $_¿¡ ´ëÇØ ¸ÅÄ¡ÇÏ´Â °æ¿ì "$_ =~" ¸¦ »ý·«ÇÒ ¼ö ÀÖ´Ù. ¸ÅÄ¡µÈ ºÎºÐÀÌ ÀÖ´Ù¸é, s///´Â ¸ÅÄ¡µÈ Ƚ¼ö¸¦ ¹ÝȯÇÏ°Ô µÈ´Ù. ¸ÅÄ¡µÈ ºÎºÐÀÌ ¾ø´Ù¸é °ÅÁþ°ªÀ» ¹ÝȯÇÑ´Ù. ´ÙÀ½ ¿¹¸¦ »ìÆ캸ÀÚ. {{{#!vim perl $x = "Time to feed the cat!"; $x =~ s/cat/hacker/; # $x contains "Time to feed the hacker!" $y = "'quoted words'"; $y =~ s/^'(.*)'$/$1/; # strip single quotes, # $y contains "quoted words" }}} s/// ¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¶§´Â, ¸ÅÄ¡µÈ º¯¼öµéÀÎ $1 , $2 µîÀº replacement À§Ä¡¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Àü¿ª ¼ö½Ä¾î¸¦ °°ÀÌ ¾²¸é, s///g ¿¬»êÀÚ´Â ¸ÅÄ¡°¡ µÇ´ÂÇÑ Ã£¾Æ¹Ù²Ù±â¸¦ °è¼ÓÇÏ¿© ½ÇÇàÇÑ´Ù. {{{#!vim perl $x = "I batted 4 for 4"; $x =~ s/4/four/; # $x contains "I batted four for 4" $x = "I batted 4 for 4"; $x =~ s/4/four/g; # $x contains "I batted four for four" }}} °è»ê ¼ö½Ä¾î¸¦ »ç¿ëÇÑ s///e ¿¬»êÀÚ´Â replacement¸¦ ¹®ÀÚ±×´ë·Î Çؼ®ÇÏÁö ¾Ê°í, ¼ö½ÄÀ¸·Î º¸°í °è»êÀ» ÇÑ µÚ¿¡ ±× °ªÀ» »ç¿ëÇÑ´Ù. ÀÌ´Â replacement ºÎºÐÀ» eval{...} ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© °è»êÇÏ´Â °ÍÀ¸·Î º¼ ¼ö ÀÖ´Ù. {{{#!vim perl # reverse all the words in a string $x = "the cat in the hat"; $x =~ s/(\w+)/reverse $1/ge; # $x contains "eht tac ni eht tah" # convert percentage to decimal $x = "A 39% hit rate"; $x =~ s!(\d+)%!$1/100!e; # $x contains "A 0.39 hit rate" }}} ¸¶Áö¸· ¿¹¸¦ º¸ÀÚ. m//ÀÇ °æ¿ì¿Í °°ÀÌ s/// ¶ÇÇÑ ±¸ºÐÀÚ·Î ´Ù¸¥ ¹®ÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î s!!! , s{}{}, ½ÉÁö¾î´Â s{}// ·Î ¾µ ¼öµµ ÀÖ´Ù. ¸¸¾à `s'''` ÀÇ °æ¿ìó·³ ÀÛÀº µû¿ÈÇ¥ ¹®ÀÚ°¡ »ç¿ëµÇ´Â °æ¿ì, regex ¿Í replacement ´Â single quoted ¹®ÀÚ¿­·Î 󸮵ȴÙ. === split ¿¬»êÀÚ === split /regex/, string ¿Í °°ÀÌ »ç¿ëÇÏ¿© ¹®ÀÚ¿­À» ÂÉ°¶ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì ÂÉ°³Áø ¹®ÀÚ¿­ÀÇ ¸®½ºÆ®°¡ ¹ÝȯµÈ´Ù. regex´Â ¾î¶² ¹®ÀÚ¿­À» ±âÁØÀ¸·Î ÂÉ°¶ °ÍÀÎÁö¸¦ °áÁ¤ÇÑ´Ù. ¿¹¸¦ µé¾î ¹®ÀÚ¿­À» ´Ü¾î´ÜÀ§·Î ÂÉ°³·Á¸é, {{{#!vim perl $x = "Calvin and Hobbes"; @word = split /\s+/, $x; # $word[0] = 'Calvin' # $word[1] = 'and' # $word[2] = 'Hobbes' }}} ½°Ç¥¸¦ ±¸ºÐÀÚ·Î »ç¿ëÇÑ ¹®ÀÚ¿­ÀÇ °æ¿ì´Â, {{{#!vim perl $x = "1.618,2.718, 3.142"; @const = split /,\s*/, $x; # $const[0] = '1.618' # $const[1] = '2.718' # $const[2] = '3.142' }}} ¸¸¾à Á¤±ÔÇ¥Çö½ÄÀ» °ø¹éÀ¸·Î µÎ¸é, Áï // °ú °°ÀÌ »ç¿ëÇϸé, ¹®ÀÚ¿­Àº °¢°¢ÀÇ ¹®ÀÚ·Î ÂÉ°³Áö°Ô µÈ´Ù. ¸¸¾à Á¤±ÔÇ¥Çö½ÄÀÌ ±×·ìÀ» °¡Áö°í ÀÖ´Ù¸é ±× ±×·ì¿¡ ÀÇÇØ ¸ÅÄ¡µÈ ºÎºÐµµ ÇÔ²² ¹ÝȯµÈ´Ù. {{{#!vim perl $x = "/usr/bin"; @parts = split m!(/)!, $x; # $parts[0] = '' # $parts[1] = '/' # $parts[2] = 'usr' # $parts[3] = '/' # $parts[4] = 'bin' }}} ÀÌ °æ¿ì´Â Á¤±ÔÇ¥Çö½Ä¿¡ ÀÇÇØ Ã¹¹ø° ¹®ÀÚ°¡ ¸ÅÄ¡µÇ¾ú°í, ù¹ø° / ÀÇ ¾Õ¿¡ ÀÖ´Â ¹®ÀÚ¿­ÀÌ `''`À̹ǷΠºó ¹®ÀÚ¿­µµ ÇÔ²² ¹ÝȯµÈ´Ù. === ¹ö±× === ¾øÀ½. == SEE ALSO == ÀÌ ÆäÀÌÁö´Â ´ÜÁö "ºü¸£°Ô ½ÃÀÛÇϱâ"¿ë ¹®¼­ÀÌ´Ù. Á¤±ÔÇ¥Çö½Ä¿¡ ´ëÇÑ ´õ ±íÀÌÀÖ´Â ³»¿ëÀº [perlretut]¸¦ º¸°í, reference page´Â [perlre]¸¦ ºÁ¶ó. == AUTHOR AND COPYRIGHT == Copyright (c) 2000 Mark Kvale All rights reserved. This document may be distributed under the same terms as Perl itself. === Acknowledgments === The author would like to thank Mark-Jason Dominus, Tom Christiansen, Ilya Zakharevich, Brad Hughes, and Mike Giroux for all their helpful comments.