· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
perldoc/perlrequick


1. ¹ø¿ª¹®¼­Á¤º¸

1.1. ¿øÀúÀÚ ¹× ¹ø¿ªÀÚ

¿øÀúÀÚ : Mark Kvale
¹ø¿ªÀÚ : redneval@kldp.org

1.2. ¿µ¹®¿øº» Ãâó

¸µÅ© : http://perldoc.perl.org/perlrequick.html
ºÐ·ù ¹× À̸§ : Perl 5.8.8 documentation - Tutorials - perlrequick

1.3. ÀúÀÛ±Ç ¹× ¶óÀ̼¾½º

º» ¹ø¿ª¹®¼­ÀÇ ¹ø¿ªºÎºÐ¿¡ ÇØ´çµÇ´Â ºÎºÐÀÇ ¿ø ÀúÀÛ±ÇÀº redneval@kldp.org ¿¡ ÀÖ´Ù. ´Ù¸¸, ÀúÀ۱ǿ¡ µû¸¥ ¸ðµç ±Ç¸®´Â Free Software Foundation (FSF) ·Î À̾çÇÑ´Ù.

º» ¹ø¿ª¹®¼­´Â ¿µ¹® perlrequickÀÇ ¶óÀ̼¾½º¿¡ µû¶ó GPLÀ» µû¸¥´Ù. ±×·¯¹Ç·Î, º» ¹ø¿ª¹®¼­ÀÇ GPL¹öÀüÀº ¿µ¹® perlrequickÀÇ GPL¹öÀüÀ» µû¸¥´Ù. ¸¸¾à, ¿µ¹® perlrequickÀÇ GPL¹öÀüÀÌ ¹Ù²î¸é, º» ¹ø¿ª¹®¼­ ¶ÇÇÑ ±× ¹Ù²ï ¹öÀüÀ¸·Î ¹Ù²ã¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

1.4. ¸µÅ©

ÆÞ¿¡ °üÇÑ ´Ù¸¥ ¹®¼­¸¦ º¸°í ½Í´Ù¸é perldocÀ» Âü°íÇ϶ó.

2. ¹ø¿ª¹®¼­

2.1. À̸§

perlrequick - ÆÞ Á¤±ÔÇ¥Çö½Ä ºü¸£°Ô ½ÃÀÛÇϱâ

2.2. ¼³¸í

º» ÆäÀÌÁö´Â, ÆÞ¿¡¼­ Á¤±ÔÇ¥Çö½ÄÀ» ÀÌÇØÇÏ°í ÀÛ¼ºÇÏ°í »ç¿ëÇϴµ¥ ÇÊ¿äÇÑ °¡Àå ±âÃÊÀûÀÎ ³»¿ëÀ» ´Ù·é´Ù.


2.2.1. ´Ü¾î¼³¸í

  • ¸ÅÄ¡(match): properÇÑ ÇÑ±Û ´ë¿ª¾î¸¦ ãÀ» ¼ö ¾ø¾ú´Ù.
  • ±¸ºÐÀÚ(delimiter)
  • ¸ÞŸ¹®ÀÚ(metacharacter)
  • escaped character: ÇÑ±Û ´ë¿ª¾î¿¡ ´ëÇØ ³í¶õÀÌ ÀÖ´Ù. http://kldp.org/node/76662
  • anchor ¸ÞŸ¹®ÀÚ, ´Ü¾î anchor: anchorÀÇ ¶æÀº ´éÀÌ´Ù. ^, $, \b°¡ ¸¶Ä¡ ¹èÀÇ ´é°ú °°ÀÌ À§Ä¡¸¦ °íÁ¤½ÃÄÑÁشٴ ÀǹÌÀÌ´Ù.
  • ¼ö½Ä¾î(modifier): 'º¯°æÀÚ'·Î ¹ø¿ªÇÒ ¼ö ÀÖÁö¸¸, ÆÞÀÇ ¹®ÇÐÀû Ư¼ºÀ» °í·ÁÇÏ¿© '¼ö½Ä¾î'·Î ¹ø¿ªÇÏ¿´´Ù. ¸¶Âù°¡Áö ÀÌÀ¯·Î '¼ö·®Çü¿ë»ç(quantifier)'´Â '¼ö·®Áö½ÃÀÚ'·Î ¹ø¿ªÇÏÁö ¾Ê°Ú´Ù.
  • double quoted ¹®ÀÚ¿­, single quoted ¹®ÀÚ¿­: FIX_ME

2.2.2. ´Ü¼ø ´Ü¾î ¸ÅÄ¡

Á¤±ÔÇ¥Çö½Ä¿¡¼­ °¡Àå °£´ÜÇÑ °æ¿ì´Â ´Ü¼øÇÑ ´Ü¾î ¶Ç´Â ¹®ÀÚ¿­À» ã´Â °æ¿ìÀÌ´Ù. ´Ü¾î Çϳª·Î ±¸¼ºµÈ Á¤±ÔÇ¥Çö½ÄÀº, ±× ´Ü¾î¸¦ Æ÷ÇÔÇÑ ¸ðµç ¹®ÀÚ¿­¿¡ ´ëÇؼ­ ¸ÅÄ¡µÈ´Ù.

    "Hello World" =~ /World/;  # matches

ÀÌ ½ÇÇ๮¿¡¼­ "World"´Â Á¤±ÔÇ¥Çö½ÄÀÌ°í, "/World/"´Â "World"¸¦ Æ÷ÇÔÇÑ ¹®ÀÚ¿­À» ãÀ¸¶ó´Â °ÍÀ» ÀǹÌÇÑ´Ù. =~ ¿¬»êÀÚ´Â Á¤±ÔÇ¥Çö½Ä°ú // ¿¬»êÀÚ¿Í ÇÔ²² ÀÛ¿ëÇÏ¿©, Áº¯ÀÇ ¹®ÀÚ¿­ÀÌ Á¤±ÔÇ¥Çö½Ä¿¡ ¸ÅÄ¡µÇ¸é Âü°ªÀ» ¹ÝȯÇÏ°Ô µÈ´Ù. ¸¸¾à ¸ÅÄ¡°¡ µÇÁö ¾ÊÀ¸¸é °ÅÁþ°ªÀ» ¹ÝȯÇÏ°Ô µÈ´Ù. À§ÀÇ °æ¿ì¿¡´Â "World"¹®ÀÚ¿­Àº "Hello World"¹®ÀÚ¿­¿¡ Á¸ÀçÇϹǷΠÀ§ÀÇ Ç¥Çö½ÄÀº Âü°ªÀ» °®´Â´Ù. À̸¦ ÀÀ¿ëÇÏ¿© ´ÙÀ½°ú °°ÀÌ ÇÒ ¼ö ÀÖ´Ù.

ù¹ø°·Î´Â, ´ÙÀ½°ú °°ÀÌ Á¶°Ç¹®À¸·Î »ç¿ëÇÒ ¼ö ÀÕ´Ù.

    print "It matches\n" if "Hello World" =~ /World/;

!~ ¿¬»êÀÚ´Â =~ ¿¬»êÀÚÀÇ ¹Ý´ëÀǹ̷Π»ç¿ëµÈ´Ù.

    print "It doesn't match\n" if "Hello World" !~ /World/;
Á¤±ÔÇ¥Çö½ÄÀÇ ÀϺηΠº¯¼ö¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.

    $greeting = "World";
    print "It matches\n" if "Hello World" =~ /$greeting/;

¸¸¾à $_¿¡ ´ëÇؼ­ ¸ÅÄ¡ÇÏ´Â °æ¿ì´Â "$_ =~" ºÎºÐÀ» »ý·«ÇÒ ¼ö ÀÖ´Ù.

    $_ = "Hello World";
    print "It matches\n" if /World/;

¸¶Áö¸·À¸·Î, ±âº» ±¸ºÐÀÚ·Î »ç¿ëµÇ´Â //´ë½Å¿¡ ´Ù¸¥ ÀÓÀÇÀÇ ¹®ÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì´Â ¾Õ¿¡ 'm'À» ºÙ¿©Áà¾ß ÇÑ´Ù.

    "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

Âü°ªÀ» °¡Áö·Á¸é, Á¤±ÔÇ¥Çö½ÄÀÌ ¹®ÀÚ¿­ÀÇ ÀÏºÎ¿Í Á¤È®È÷ ÀÏÄ¡ÇؾßÇÑ´Ù.

    "Hello World" =~ /world/;  # ±âº»ÀûÀ¸·Î Á¤±ÔÇ¥Çö½ÄÀº ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇϹǷÎ, ÀÌ °æ¿ì´Â ¸ÅÄ¡µÇÁö ¾Ê´Â´Ù.

    "Hello World" =~ /o W/;    # °ø¹é¹®ÀÚ ' 'µµ ¶ÇÇÑ ¹®ÀÚ·Î Ãë±ÞµÇ¹Ç·Î, ÀÌ °æ¿ì´Â ¸ÅÄ¡µÈ´Ù.

    "Hello World" =~ /World /; # "Hello World"ÀÇ ³¡¿¡ °ø¹é¹®ÀÚ ' '°¡ ¾øÀ¸¹Ç·Î ¸ÅÄ¡µÇÁö ¾Ê´Â´Ù.

Á¤±Ô½ÄÀº ¸ÅÄ¡ °¡´ÉÇÑ °¡Àå ¾ÕºÎºÐ¿¡¼­ ¸ÅÄ¡µÈ´Ù.

    "Hello World" =~ /o/;       # matches 'o' in 'Hello'
    "That hat is red" =~ /hat/; # matches 'hat' in 'That'

¸ðµç ¹®ÀÚ°¡ ¹®ÀÚ±×´ë·ÎÀÇ ¸ÅÄ¡·Î »ç¿ëµÇ´Â °ÍÀº ¾Æ´Ï´Ù. ¸ÞŸ¹®ÀÚ¶ó°í ºÒ¸®´Â ¸î¸î ¹®ÀÚµéÀº Á¤±ÔÇ¥Çö½ÄÀÇ Æ¯¼ö±¸¹®À» À§ÇØ »ç¿ëµÈ´Ù. ¸ÞŸ¹®ÀÚ´Â

    {}[]()^$.|*+?\
ÀÌ ÀÖÀ¸¸ç, ¿ª½½·¡½¬ '\' µÚ¿¡ ¾²°Ô µÇ¸é ¹®ÀÚ±×´ë·ÎÀÇ ¸ÅÄ¡¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

    "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ÀÌ´Ù.)

    "1000\t2000" =~ m(0\t2)        # matches
    "cat"        =~ /\143\x61\x74/ # matches, but a weird way to spell cat

Á¤±ÔÇ¥Çö½ÄÀº ÀϹÝÀûÀÎ double quoted ¹®ÀÚ¿­°ú ¸¶Âù°¡Áö·Î Ãë±ÞµÈ´Ù. ±×·¯¹Ç·Î Á¤±ÔÇ¥Çö½ÄÀÇ ÀϺηΠº¯¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù.

    $foo = 'house';
    'cathouse' =~ /cat$foo/;   # matches
    'housecat' =~ /${foo}cat/; # matches

À§¿¡¼­ »ìÆ캻 ¸ðµç Á¤±ÔÇ¥Çö½ÄµéÀ» »ìÆ캸¸é, Á¤±ÔÇ¥Çö½ÄÀº ¹®ÀÚ¿­ÀÇ À§Ä¡¿¡ »ó°ü¾øÀÌ ¸ÅÄ¡µÊÀ» ¾Ë ¼ö ÀÖ´Ù. À§Ä¡¸¦ ÁöÁ¤Çϱâ À§Çؼ­ anchor ¸ÞŸ¹®ÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ^ ´Â ¹®ÀÚ¿­ÀÇ Ã³À½À» ÁöÁ¤ÇÏ°í, $ ´Â ¹®ÀÚ¿­ÀÇ ³¡ ¶Ç´Â \n¹®ÀÚÀÇ ¹Ù·Î ¾ÕÀ» ÁöÁ¤ÇÑ´Ù.

    "housekeeper" =~ /keeper/;         # matches
    "housekeeper" =~ /^keeper/;        # doesn't match
    "housekeeper" =~ /keeper$/;        # matches
    "housekeeper\n" =~ /keeper$/;      # matches
    "housekeeper" =~ /^housekeeper$/;  # matches


2.2.3. ¹®ÀÚ ÁýÇÕ

Á¤±ÔÇ¥Çö½ÄÀÇ ÇÑ ºÎºÐÀ» Ç¥ÇöÇϴµ¥ À־, ÇϳªÀÇ ¹®ÀÚ¸¦ »ç¿ëÇÏ´Â °Í ´ë½Å¿¡, ¸ÅÄ¡ °¡´ÉÇÑ ¹®ÀÚµéÀ» ³ª¿­ÇÏ´Â ¹æ½ÄÀ¸·Î ¹®ÀÚ ÁýÇÕÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ³ª¿­µÈ ¹®ÀÚµéÀ» ´ë°ýÈ£·Î µÑ·¯½Î´Â °ÍÀ¸·Î ¹®ÀÚ ÁýÇÕÀÓÀ» ³ªÅ¸³½´Ù. ´ÙÀ½ÀÇ ¿¹¸¦ º¸ÀÚ.

    /cat/;            # matches 'cat'
    /[bcr]at/;        # matches 'bat', 'cat', or 'rat'
    "abc" =~ /[cab]/; # matches 'a'

¸¶Áö¸· ½ÇÇ๮À» »ìÆ캸ÀÚ. Á¤±ÔÇ¥Çö½Ä »óÀÇ ¹®ÀÚ ÁýÇÕÀÇ Ã¹¹ø° ¹®ÀÚ´Â 'c' ¿´À½¿¡µµ, Á¤±ÔÇ¥Çö½ÄÀÌ ¸ÅÄ¡ÇÏ´Â °ÍÀº 'c'°¡ ¾Æ´Ñ 'a'°¡ µÈ´Ù.

    /[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'¸¦ »ç¿ëÇÔÀ¸·Î½á ´ë¼Ò¹®ÀÚ ±¸ºÐÀ» ÇÏÁö ¾Êµµ·Ï ¸¸µé¾ú´Ù.

¹®ÀÚ ÁýÇÕ ³»¿¡¼­ ¹®ÀÚ¸¦ ¾µ ¶§µµ ¿ª½Ã Ư¼ö¹®ÀÚ´Â ¾Õ¿¡¼­ ¾ð±ÞÇÑ ¹æ½ÄÀ¸·Î »ç¿ëÇØ¾ß ÇÑ´Ù. ±×·±µ¥ ¹®ÀÚ ÁýÇÕ ³»¿¡¼­´Â Ãß°¡ÀûÀ¸·Î -]\^$ °¡ Ư¼ö¹®ÀÚ°¡ µÇ¹Ç·Î À̸¦ »ç¿ëÇϱâ À§Çؼ­´Â ¿ª½½·¡½¬¸¦ ¾Õ¿¡ ºÙ¿©¾ß ÇÑ´Ù.

   /[\]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> À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

    /item[0-9]/;  # matches 'item0' or ... or 'item9'
    /[0-9a-fA-F]/;  # matches a hexadecimal digit

¸¸¾à '-'¹®ÀÚ°¡ ¹®ÀÚ ÁýÇÕÀÇ Ã¹ ¹®ÀÚ³ª ¸¶Áö¸· ¹®ÀÚ·Î »ç¿ëµÇ¸é, Ư¼ö¹®ÀÚ°¡ ¾Æ´Ñ ¹®ÀÚ±×´ë·ÎÀÇ Àǹ̸¦ °®´Â´Ù.

¹®ÀÚ ÁýÇÕÀÇ Ã¹¹ø° À§Ä¡¿¡ '^'¹®ÀÚ°¡ ÀÖÀ¸¸é À̴ Ư¼ö¹®ÀÚÀ̸ç, ÀÌ´Â ¹®ÀÚ ÁýÇÕ¿¡ ¹Ý´ëÀÇ Àǹ̸¦ °®°Ô ÇÑ´Ù. Áï, ¹®ÀÚ ÁýÇÕ³»¿¡ ¾ø´Â ¸ðµç ¹®ÀÚ¸¦ ¸ÅÄ¡ÇÑ´Ù. `...` ¿Í `^...`´Â µÑ ´Ù ÇϳªÀÇ ¹®ÀÚ¿¡ ¸ÅÄ¡µÇ¸ç, ±×·¸Áö ¾ÊÀ¸¸é ¸ÅÄ¡´Â ½ÇÆÐÇÑ´Ù.

    /[^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 ´Â ¹®ÀÚÁýÇÕ ¾È°ú ¹Û¿¡¼­ ¾²ÀÏ ¼ö ÀÖ´Ù.

    /\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ÀÇ °æ°è¿¡ ¸ÅÄ¡µÈ´Ù. (Áï, ´Ü¾îÀÇ °æ°è¿¡ ¸ÅÄ¡µÈ´Ù.)

    $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

¸¶Áö¸· ¿¹¿¡¼­ º¸¸é, ¹®ÀÚ¿­ÀÇ ³¡ ¶ÇÇÑ ´Ü¾îÀÇ °æ°è·Î °£ÁֵǴ °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.


2.2.4. ¸ÞŸ¹®ÀÚ '|'

¾Õ¿¡¼­´Â ¹®ÀÚ ÁýÇÕÀ» ´Ù·ð´Âµ¥, À̹ø¿¡´Â ¹®ÀÚ¿­¿¡ ´ëÇؼ­ ºñ½ÁÇÏ°Ô, ÇϳªÀÇ ¹®ÀÚ¿­ ´ë½Å¿¡ ¸ÅÄ¡ °¡´ÉÇÑ ¹®ÀÚ¿­(È帶ó°í ºÎ¸£°Ú´Ù.)À» ³ª¿­ÇÏ´Â ¹æ½ÄÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î dog ¶Ç´Â cat À» ¸ÅÄ¡ÇÏ°í ½Í´Ù¸é Á¤±ÔÇ¥Çö½Ä dog|cat ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Èĺ¸ Áß¿¡¼­ ¸ÕÀú ÀÖ´Â È常¦ ¿ì¼±ÀûÀ¸·Î ¸ÅÄ¡ÇÏ°Ô µÈ´Ù. Áï, dog°¡ ¸ÅÄ¡µÇÁö ¾ÊÀº °æ¿ì¿¡ ±× ´ÙÀ½ Èĺ¸ÀÎ cat°¡ ¸ÅÄ¡µÇ´ÂÁö¸¦ »ìÇÇ°Ô µÈ´Ù. ¸¸¾à catµµ ¸ÅÄ¡°¡ µÇÁö ¾ÊÀ¸¸é, ¸ÅÄ¡´Â ½ÇÆÐÇÏ°í ¹®ÀÚ¿­ÀÇ ´ÙÀ½ À§Ä¡¿¡¼­ ´Ù½Ã ¸ÅÄ¡¸¦ ½ÃµµÇÑ´Ù. ¿¹¸¦ ÇÑ ¹ø º¸ÀÚ.

    "cats and dogs" =~ /cat|dog|bird/;  # matches "cat"
    "cats and dogs" =~ /dog|cat|bird/;  # matches "cat"

µÎ¹ø° Á¤±ÔÇ¥Çö½ÄÀ» º¸ÀÚ. dog°¡ ù¹ø° Èĺ¸ À̱â´Â ÇÏÁö¸¸, ¹®ÀÚ¿­ "cats and dogs"¿¡ ´ëÇؼ­´Â cat°¡ ¸ÕÀú ¸ÅÄ¡µÇ°Ô µÈ´Ù.

    "cats"          =~ /c|ca|cat|cats/; # matches "c"
    "cats"          =~ /cats|cat|ca|c/; # matches "cats"

¸ÅÄ¡µÇ´Â ¹®ÀÚ¿­ÀÇ À§Ä¡°¡ °°Àº °æ¿ì´Â ¾Õ¿¡ ÀÖ´Â È帰¡ ¿ì¼±ÀûÀ¸·Î ¸ÅÄ¡µÈ´Ù. ±×·¯¹Ç·Î À§ÀÇ ¿¹¿Í°°ÀÌ ¸ðµç È帰¡ ¸ÅÄ¡µÇ´Â °æ¿ì¿¡´Â ù¹ø° È帰¡ ¸ÅÄ¡µÈ´Ù.


2.2.5. ±×·ì°ú Áßø±¸Á¶

±×·ì ¸ÞŸ¹®ÀÚÀÎ ()´Â Á¤±ÔÇ¥Çö½ÄÀÇ ÀϺκÐÀ» ÇϳªÀÇ À¯´ÖÀ¸·Î ´Ù·ç°Ô ÇØÁØ´Ù. À̸¦ "±×·ìÀ¸·Î ¸¸µç´Ù"°í Çϸç, Á¤±ÔÇ¥Çö½Ä¿¡¼­ ()À¸·Î µÑ·¯½ÓÀ¸·Î½á ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, house(cat|keeper)´Â houseµÚ¿¡ cat ¶Ç´Â keeper°¡ ¿À´Â ¹®ÀÚ¿­À» ¸ÅÄ¡ÇÑ´Ù.

    /(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


2.2.6. ¸ÅÄ¡µÈ ¹®ÀÚ¿­¿¡¼­ ÃßÃâÇϱâ

±×·ì ¸ÞŸ¹®ÀÚ ()¸¦ ÀÌ¿ëÇÏ¸é ¸ÅÄ¡µÈ ¹®ÀÚ¿­¿¡¼­ ÃßÃâÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. °¢°¢ÀÇ ±×·ì¿¡ ¸ÅÄ¡µÈ ¹®ÀÚ¿­µéÀº Ư¼öº¯¼ö $1, $2, ... µîÀ¸·Î ¼ø¼­´ë·Î ÀúÀåµÈ´Ù. ÀÌ Æ¯¼öº¯¼öµéÀº ´Ù¸¥ ÀÏ¹Ý º¯¼ö°ú °°Àº ¹æ½ÄÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.

    # 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,...) ÀÇ °ªÀ» ¹ÝȯÇÏ°Ô µÈ´Ù. ±×·¯¹Ç·Î À§ÀÇ ¿¹Á¦´Â ´ÙÀ½°ú °°ÀÌ ¹Ù²ã¾µ ¼ö ÀÖ´Ù.

    ($hours, $minutes, $second) = ($time =~ /(\d\d):(\d\d):(\d\d)/);

¸¸¾à Á¤±ÔÇ¥Çö½ÄÀÌ ÁßøµÇ´Â °æ¿ì, $1Àº °¡Àå ¿ÞÂÊÀÇ ( ¹®ÀÚ·Î ÁöÁ¤µÈ ±×·ì, $2´Â µÎ ¹øÀç·Î ¿ÞÂÊ¿¡ À§Ä¡ÇÑ ( ¹®ÀÚ·Î ÁöÁ¤µÈ ±×·ì¿¡ ÀÇÇØ ¹®ÀÚ¿­ÀÌ ÀúÀåµÇ°Ô µÈ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½°ú °°ÀÌ Á¤±ÔÇ¥Çö½ÄÀÌ ÀÖÀ» ¶§ °¢°¢ÀÇ ±×·ì¿¡ ÇÒ´çµÇ´Â Ư¼öº¯¼öÀÇ ¹øÈ£´Â ±× ¾Æ·¡¿¡ Àû¾î ³õ¾Ò´Ù.

    /(ab(cd|ef)((gi)|j))/;
     1  2      34

'¿ªÂüÁ¶ÀÚ'·Î ºÒ¸®´Â \1 , \2 , ... µéÀº, Á¤±ÔÇ¥Çö½Ä ³»¿¡¼­ $1 , $2 , ... °ú °°Àº ¿ªÇÒÀ» ÇÏ°Ô µÈ´Ù.

    /(\w\w\w)\s\1/; # find sequences like 'the the' in string

$1 , $2 , ... ´Â Á¤±ÔÇ¥Çö½ÄÀÇ ¹Û¿¡¼­¸¸ ¾²¿©¾ß ÇÏ°í, \1 , \2 , ... ´Â Á¤±ÔÇ¥Çö½Ä ¾È¿¡¼­¸¸ ¾²¿©¾ß ÇÑ´Ù.


2.2.7. ¹Ýº¹ ¸ÅÄ¡

Á¤±ÔÇ¥Çö½ÄÀÇ ÇÑ ºÎºÐÀ» ¿øÇÏ´Â ¼ö¸¸Å­ ¹Ýº¹Çϱâ À§Çؼ­, ¼ö·® ¸ÞŸ¹®ÀÚ(¶Ç´Â ¼ö·®Çü¿ë»ç) ?, * , + , {} ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¼ö·®Çü¿ë»ç´Â ¹®ÀÚ, ¹®ÀÚ ÁýÇÕ, ±×·ìÀÇ ¹Ù·Î µÚ¿¡ ¿Ã ¼ö ÀÖ´Ù. ±×µéÀÇ Àǹ̴ ´ÙÀ½°ú °°´Ù.

  • a{n,m} : ÃÖ¼Ò n¹øÀÌ»ó ÃÖ´ë m¹øÀÌÇÏ ¸ÅÄ¡ÇÑ´Ù.
  • a{n,} : ÃÖ¼Ò n¹øÀÌ»ó ¸ÅÄ¡ÇÑ´Ù.
  • a{n} : Á¤È®È÷ n¹ø ¸ÅÄ¡ÇÑ´Ù.
  • a? : a{0,1} ¿Í °°´Ù.
  • a* : a{0,} ¿Í °°´Ù.
  • a+ : a{1,} ¿Í °°´Ù.

¿¹¸¦ Çѹø º¸ÀÚ.

    /[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

¼ö·®Çü¿ë»ç´Â ¸ÅÄ¡µÉ ¼ö ÀÖ´ÂÇÑ ÃÖ´ëÇÑ ¸¹Àº Ƚ¼ö¸¦ ¸ÅÄ¡ÇÏ´Â ¹æ½ÄÀ¸·Î ÀÛµ¿ÇÑ´Ù. ±×·¯¹Ç·Î,

    $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¹ø ¸ÅÄ¡µÈ´Ù.

¸ÅÄ¡ ¿¬»êÀÚ¿¡ ´ëÇØ ¾Ë¾Æ¾ßÇÒ »çÇ×ÀÌ ¸î °¡Áö ´õ Àִµ¥,

    $pattern = 'Seuss';
    while (<>) {
        print if /$pattern/;
    }

À§ÀÇ Äڵ忡¼­ ¸Å ·çÇÁ¸¶´Ù $patternÀÌ Àç°è»êµÈ´Ù. ¸¸¾à $pattern°ªÀÌ ¾È ¹Ù²î¾î¼­ Àç°è»êÀÌ ÇÊ¿ä¾ø´Ù¸é, //o ¼ö½Ä¾î¸¦ »ç¿ëÇ϶ó. ÀÌ °æ¿ì $patternÀº Çѹø¸¸ ´ëÀԵȴÙ. ¸¸¾à º¯¼ö°¡ ´ëÀԵǴ °ÍÀ» ¸·°í ½Í´Ù¸é, Ư¼ö ±¸ºÐÀÚ m'' À» »ç¿ëÇ϶ó. ±×·¯¸é À̸¦ ¹®ÀÚ ±×´ë·Î Çؼ®ÇÏ°Ô µÈ´Ù.

    @pattern = ('Seuss');
    m/@pattern/; # matches 'Seuss'
    m'@pattern'; # matches the literal string '@pattern'

Àü¿ª ¼ö½Ä¾î //g¸¦ »ç¿ëÇÏ¸é ¿øÇÏ´Â ¸¸Å­ ¸¹Àº Ƚ¼ö¸¦ ¸ÅÄ¡ÇÒ ¼ö ÀÖ´Ù. ±×·± ½ÄÀ¸·Î ¿¬¼ÓÀûÀ¸·Î ¸ÅÄ¡°¡ ÀÌ·ïÁö¸é, ¸ÅÄ¡°¡ ÇÑ ¹ø¾¿ ÀÌ·ïÁú ¶§¸¶´Ù, ¸ÅÄ¡ Æ÷ÀÎÆ®°¡ ´ÙÀ½ À§Ä¡·Î À̵¿ÇÏ°Ô µÈ´Ù. ¸¸¾à ÀÌ À§Ä¡µéÀ» ¾Ë°í ½Í´Ù¸é pos() ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ¿¹¸¦µé¾î

    $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 ´Â ¸ÅÄ¡µÈ ±×·ìÀÇ ¸®½ºÆ®¸¦ ¹ÝȯÇÑ´Ù. ¸¸¾à ±×·ìÀÌ Çϳªµµ ¾ø´Ù¸é, Á¤±ÔÇ¥Çö½Ä Àüü¿¡ ÀÇÇØ ¸ÅÄ¡µÈ ºÎºÐÀÇ ¸®½ºÆ®¸¦ ¹ÝȯÇÑ´Ù.

    @words = ($x =~ /(\w+)/g);  # matches,
                                # $word[0] = 'cat'
                                # $word[1] = 'dog'
                                # $word[2] = 'house'


2.2.8. ã¾Æ¹Ù²Ù±â

ã¾Æ¹Ù²Ù±â´Â s/regex/replacement/modifiers ¿Í °°Àº½ÄÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. replacement´Â ÆÞÀÇ ¹®ÀÚ¿­À» ¾²¸é µÈ´Ù. Á¤±ÔÇ¥Çö½Ä¿¡ ÀÇÇØ ¸ÅÄ¡µÈ ºÎºÐÀº replacement·Î ´ëüµÈ´Ù. =~ ¿¬»êÀÚµµ ¶ÇÇÑ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¶Âù°¡Áö·Î $_¿¡ ´ëÇØ ¸ÅÄ¡ÇÏ´Â °æ¿ì "$_ =~" ¸¦ »ý·«ÇÒ ¼ö ÀÖ´Ù. ¸ÅÄ¡µÈ ºÎºÐÀÌ ÀÖ´Ù¸é, s///´Â ¸ÅÄ¡µÈ Ƚ¼ö¸¦ ¹ÝȯÇÏ°Ô µÈ´Ù. ¸ÅÄ¡µÈ ºÎºÐÀÌ ¾ø´Ù¸é °ÅÁþ°ªÀ» ¹ÝȯÇÑ´Ù. ´ÙÀ½ ¿¹¸¦ »ìÆ캸ÀÚ.

    $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 ¿¬»êÀÚ´Â ¸ÅÄ¡°¡ µÇ´ÂÇÑ Ã£¾Æ¹Ù²Ù±â¸¦ °è¼ÓÇÏ¿© ½ÇÇàÇÑ´Ù.

    $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{...} ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© °è»êÇÏ´Â °ÍÀ¸·Î º¼ ¼ö ÀÖ´Ù.

    # 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 ¹®ÀÚ¿­·Î 󸮵ȴÙ.


2.2.9. split ¿¬»êÀÚ

split /regex/, string ¿Í °°ÀÌ »ç¿ëÇÏ¿© ¹®ÀÚ¿­À» ÂÉ°¶ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì ÂÉ°³Áø ¹®ÀÚ¿­ÀÇ ¸®½ºÆ®°¡ ¹ÝȯµÈ´Ù. regex´Â ¾î¶² ¹®ÀÚ¿­À» ±âÁØÀ¸·Î ÂÉ°¶ °ÍÀÎÁö¸¦ °áÁ¤ÇÑ´Ù. ¿¹¸¦ µé¾î ¹®ÀÚ¿­À» ´Ü¾î´ÜÀ§·Î ÂÉ°³·Á¸é,

    $x = "Calvin and Hobbes";
    @word = split /\s+/, $x;  # $word[0] = 'Calvin'
                              # $word[1] = 'and'
                              # $word[2] = 'Hobbes'

½°Ç¥¸¦ ±¸ºÐÀÚ·Î »ç¿ëÇÑ ¹®ÀÚ¿­ÀÇ °æ¿ì´Â,

    $x = "1.618,2.718,   3.142";
    @const = split /,\s*/, $x;  # $const[0] = '1.618'
                                # $const[1] = '2.718'
                                # $const[2] = '3.142'

¸¸¾à Á¤±ÔÇ¥Çö½ÄÀ» °ø¹éÀ¸·Î µÎ¸é, Áï // °ú °°ÀÌ »ç¿ëÇϸé, ¹®ÀÚ¿­Àº °¢°¢ÀÇ ¹®ÀÚ·Î ÂÉ°³Áö°Ô µÈ´Ù. ¸¸¾à Á¤±ÔÇ¥Çö½ÄÀÌ ±×·ìÀ» °¡Áö°í ÀÖ´Ù¸é ±× ±×·ì¿¡ ÀÇÇØ ¸ÅÄ¡µÈ ºÎºÐµµ ÇÔ²² ¹ÝȯµÈ´Ù.

    $x = "/usr/bin";
    @parts = split m!(/)!, $x;  # $parts[0] = ''
                                # $parts[1] = '/'
                                # $parts[2] = 'usr'
                                # $parts[3] = '/'
                                # $parts[4] = 'bin'

ÀÌ °æ¿ì´Â Á¤±ÔÇ¥Çö½Ä¿¡ ÀÇÇØ Ã¹¹ø° ¹®ÀÚ°¡ ¸ÅÄ¡µÇ¾ú°í, ù¹ø° / ÀÇ ¾Õ¿¡ ÀÖ´Â ¹®ÀÚ¿­ÀÌ ''À̹ǷΠºó ¹®ÀÚ¿­µµ ÇÔ²² ¹ÝȯµÈ´Ù.


2.2.10. ¹ö±×

¾øÀ½.


2.3. SEE ALSO

ÀÌ ÆäÀÌÁö´Â ´ÜÁö "ºü¸£°Ô ½ÃÀÛÇϱâ"¿ë ¹®¼­ÀÌ´Ù. Á¤±ÔÇ¥Çö½Ä¿¡ ´ëÇÑ ´õ ±íÀÌÀÖ´Â ³»¿ëÀº perlretut¸¦ º¸°í, reference page´Â perlre¸¦ ºÁ¶ó.


2.4. AUTHOR AND COPYRIGHT

Copyright (c) 2000 Mark Kvale All rights reserved.

This document may be distributed under the same terms as Perl itself.


2.4.1. Acknowledgments

The author would like to thank Mark-Jason Dominus, Tom Christiansen, Ilya Zakharevich, Brad Hughes, and Mike Giroux for all their helpful comments.

ID
Password
Join
One man tells a falsehood, a hundred repeat it as true.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2007-07-22 12:48:31
Processing time 0.0155 sec