IBM Korea Skip to main content
       IBM Ȩ    |  Á¦Ç° & ¼­ºñ½º  |  °í°´Áö¿ø & ´Ù¿î·Îµå  |  È¸¿ø°¡ÀÔ  

Á¤±Ô½ÄÀ» À§ÇÑ Ãß»ó ÀÚ¹Ù API ±¸ÇöÇϱâ
Perl5 regexp ¶óÀ̺귯¸®¸¦ »ç¿ëÇϱâ À§ÇØ ÀϹÝÀûÀÎ API ¸¸µé±â

Level: Intermediate

Jose San Leandro Armendariz
Independent Software Engineer
2002³â 12¿ù 1ÀÏ

ÀÚ¹Ù¿¡¼­ Á¤±Ô½ÄÀ» ÀÌ¿ëÇÏ¿© ÀÛ¾÷ÇÒ ¶§ ±¸Ã¼ (concrete) regexp ¶óÀ̺귯¸®¿¡ ÀÇÁ¸ÇÏ´Â °ÍÀº ÁÁÀº »ý°¢ÀÌ ¾Æ´Ï´Ù. Ãß»ó(abstract) ·¹À̾ »ç¿ëÇÑ´Ù¸é ´Ù¸¥ regexp ¶óÀ̺귯¸®µéÀ» º¯È¯ÇÒ ¼ö ÀÖ°í ÄÚµå¿Í ƯÁ¤ ¶óÀ̺귯¸® »çÀÌÀÇ Ä¿ÇøµÀ» ÁÙÀ̸ç, °¡Àå ¾Ë¸ÂÀº °ÍÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Ù.

Introduction
ÅؽºÆ®¸¦ ºÐ¼®ÇÏ´Â ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µå´Â °ÍÀÌ ½±´Ù°í »ý°¢ÇÏÁö¸¸ ÀÌ ÀÏÀº ±Ý»õ º¹ÀâÇØÁú ¼öµµ ÀÖ´Ù. ÀÌ°ÍÀº HTML ÆäÀÌÁö¸¦ ÆĽÌÇÏ´Â Äڵ带 ÀÛ¼ºÇÒ ¶§ÀÇ ³» °æÇèÀ̱⵵ Çß´Ù. "°¡²û¾¿" Perl5 Á¤±Ô½Ä(regexps)À» »ç¿ëÇÏ´Ù°¡ ÀÌÁ¦´Â "ÀÚÁÖ" »ç¿ëÇÏ°Ô µÇ¾ú´Ù. ÀÌ°ÍÀÌ ¹Ù·Î ÀÌ ±ÛÀ» ¾²´Â ÀÌÀ¯ÀÌ´Ù.

¹è°æ
³» °æÇèÀ¸·Î ºñÃ纼 ¶§ ´ëºÎºÐÀÇ ÀÚ¹Ù °³¹ßÀÚµéÀº ¸î °¡Áö Á¾·ùÀÇ ÅؽºÆ®¸¦ ÆĽÌÇؾßÇÑ´Ù. ÀϹÝÀûÀ¸·Î ÀÚ¹Ù ½ºÆ®¸µ °ü·Ã ÇÔ¼ö³ª indexOf ¶Ç´Â substring°ú °°Àº ¸Þ¼Òµå·Î Ãʱ⿡ ÀÛ¾÷À» ÇؾßÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÀÎDz Æ÷¸ËÀÌ ÀüÇô ¹Ù²îÁö ¾ÊÀ» °ÍÀ» ±â´ëÇϸ鼭 ¸»ÀÌ´Ù. ÇÏÁö¸¸ ÀÎDz Æ÷¸ËÀÌ º¯°æµÇ¸é »õ·Î¿î Æ÷¸ËÀ» Àд ÄÚµå´Â Á¡Á¡ º¹ÀâÇØÁö°í À¯Áö°¡ ¾î·Á¿öÁø´Ù. °á°úÀûÀ¸·Î ÄÚµå´Â ´Ü¾î ·¡ÇÎ, ÄÉÀ̽º ¹Î°¨µµ µîµîÀ» Áö¿øÇؾßÇÑ´Ù.

·ÎÁ÷ÀÌ Á¡Á¡ º¹ÀâÇØÁü¿¡ µû¶ó °ü¸®´Â Èûµé¾îÁø´Ù. ¾î¶² º¯È­µç ºÎÀÛ¿ëÀ» ³º°í ÅؽºÆ® Æļ­ÀÇ ´Ù¸¥ ºÎºÐµéÀÌ ÀÛµ¿ Á¤Áö¸¦ À¯¹ßÇϱ⠶§¹®¿¡ °³¹ßÀÚµéÀº ÀÛÀº ¹ö±×¶óµµ ÇȽº ÇÒ ½Ã°£ÀÌ ÇÊ¿äÇÏ´Ù.

ÆÞ °æÇèÀÌ ÀÖ´Â °³¹ßÀÚ´Â ÀÌ¹Ì Á¤±Ô½Äµµ Àͼ÷ÇÒ °ÍÀÌ´Ù. ±×·± °³¹ßÀÚ°¡ ÀÖ´Ù¸é ÀÌ·¯ÇÑ ±â¼úÀ» »ç¿ëÇÒ ¶§ ´Ù¸¥ ÆÀ¿øµé¿¡°Ô ¾ÈÁ¤°¨À» ÁÙ ¼ö ÀÖ´Ù. ÀÌ »õ·Î¿î Á¢±Ù¹æ½ÄÀº ÇÙ½É Æļ­ ·ÎÁ÷À» »èÁ¦ÇÏ°í ¿©±â¿¡ regexp ¶óÀ̺귯¸®¸¦ ´ëü½ÃÅ°´Â °ÍÀÌ´Ù.

Perl5¿¡ ¼÷·ÃµÈ °³¹ßÀÚÀÇ Á¦¾ÈÀ» ¹Þ¾ÆµéÀÌ¸é ±× ÆÀÀº ¾î¶² regex ±¸ÇöÀÌ ÇÁ·ÎÁ§Æ®¿¡ °¡Àå Àß ¸ÂÀ» °ÍÀΰ¡¸¦ ¼±Åà ÇؾßÇÑ´Ù. ±×·±´ÙÀ½ À̸¦ ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö¸¦ ¹è¿ö¾ßÇÑ´Ù.

ÀÎÅͳݿ¡¼­ ´Ù¾çÇÑ ´ë¾ÈµéÀ» ¿¬±¸ÇÑ ÈÄ¿¡, ÆÀÀº ¾Æ¸¶µµ Oro °°Àº Àß ¾Ë·ÁÁø ¶óÀ̺귯¸®µé Áß Çϳª¸¦ ¼±ÅÃÇÑ´Ù. ±×·±´ÙÀ½ Æļ­´Â Èû°ã°Ô ¸®ÆÑÅ丵µÇ°Å³ª °ÅÀÇ ´Ù½Ã ÀÛ¼ºµÇ°Å³ª °á±¹ Perl5Compiler, Perl5Matcher µîÀÇ Oro Ŭ·¡½º¸¦ »ç¿ëÇÏ°Ô µÈ´Ù.

ÀÌ·¯ÇÑ ¼±ÅÃÀÇ °á°ú´Â ¸íÈ®ÇÏ´Ù:

  • ÀÌ ÄÚµå´Â Jakarta OroÀÇ Å¬·¡½º¿¡ °­°áÇյȴÙ.

  • ÀÌ ÆÀÀº ºñÇÔ¼öÀû ¿ä±¸»çÇ×ÀÌ ÃæÁ·µÉ °ÍÀÎÁöÀÇ ¿©ºÎ¸¦ ¸ô¶ó À§ÇèÀ» ¾È°ÔµÈ´Ù.

  • ÀÌ ÆÀÀº Äڵ带 ¹è¿ì°í ÀçÀÛ¼ºÇϴµ¥ ½Ã°£°ú µ·À» ÅõÀÚÇÏ¿© regexp ¶óÀ̺귯¸®¸¦ »ç¿ëÇÑ´Ù. ±×µéÀÇ °áÁ¤ÀÌ Æ²¸®´Ù¸é »õ·Î¿î ¶óÀ̺귯¸®°¡ ¼±ÅõȴÙ. ÀÌ·¸°Ô ÇÑ´Ù°í Çؼ­ ºñ¿ë»ó Å« Â÷ÀÌ´Â ¾ø´Âµ¥ ÀÌÀ¯´Â, ÄÚµå´Â ´Ù½Ã ÀçÀÛ¼ºµÇ¾î¾ß ÇÒ °ÍÀ̱⠶§¹®ÀÌ´Ù.

  • ¶óÀ̺귯¸®°¡ Àß ÀÛµ¿ÇÔ¿¡µµ ºÒ±¸ÇÏ°í »õ·Î¿î °ÍÀ¸·Î ¸¶À̱׷¹ÀÌ¼Ç ÇؾßÇϴ°¡?

°áÇÕ¹æÁö(decoupling)ÀÇ ÀÌÁ¡
ÇöÀç »Ó¸¸ ¾Æ´Ï¶ó ¾ÕÀ¸·Îµµ, ÆÀÀÇ ÇÊ¿ä¿¡ °¡Àå ¸Â´Â ±¸ÇöÀÌ ¾î¶² °ÍÀÎÁö¸¦ ¾Ë ¼ö ÀÖ´Â ¹æ¹ýÀº Àִ°¡? ÇØ´äÀ» ÇÔ²² ã¾Æº¸µµ·Ï ÇÏÀÚ.

ƯÁ¤ ±¸Çö¿¡ ´ëÇÑ ÀÇÁ¸¼ºÀ» ÇÇÇÒ °Í
¾ÕÀÇ À̾߱â´Â ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î¸µ ºÐ¾ß¿¡¼­´Â ¸Å¿ì ÀϹÝÀûÀÌ´Ù. ¾î¶² °æ¿ì ±×¿Í °°Àº »óȲÀº ¸¹Àº ÅõÀÚ¿Í ¿À·£ Áö¿¬À» ¾ß±â½Ãų ¼ö ÀÖ´Ù. ÀϹÝÀûÀ¸·Î ¸ðµç °á°ú¸¦ ¿¹°ßÇÏÁö ¾Ê°í °áÁ¤ÀÌ ÀÌ·ç¾îÁö°Å³ª °áÁ¤ ÁÖüÀÚ°¡ ÀÌ¿Í °ü·ÃµÈ °æÇèÀÌ ¾øÀ» ¶§ ¹ß»ýÇÑ´Ù.

´ÙÀ½°ú °°ÀÌ »óȲÀ» ¿ä¾àÇÒ ¼ö ÀÖ´Ù:

  • ƯÁ¤ÇÑ À¯ÇüÀÇ ÇÁ·Î¹ÙÀÌ´õ°¡ ÇÊ¿äÇÏ´Ù.
  • ÃÖ»óÀÇ ÇÁ·Î¹ÙÀÌ´õ°¡ ¾î¶² °ÍÀÎÁö¸¦ ¼±ÅÃÇÒ °´°üÀûÀÎ ±âÁØÀÌ ¾ø´Ù.
  • ÃÖ¼ÒÀÇ ºñ¿ëÀ¸·Î ¸ðµç È常¦ Æò°¡ÇÒ ¼ö Àֱ⸦ ¿øÇÑ´Ù
  • ÀÌ °áÁ¤Àº ¼±ÅÃµÈ ÇÁ·Î¹ÙÀÌ´õ¿Í ´ç½ÅÀ» °á¼Ó½ÃÄѼ­´Â ¾ÈµÈ´Ù.

ÀÌ·¯ÇÑ ¹®Á¦¿¡ ´ëÇÑ ¼Ö·ç¼ÇÀº ÇÁ·Î¹ÙÀÌ´õ¿¡ µ¶¸³ÀûÀÎ Äڵ带 ¸¸µå´Â °ÍÀÌ´Ù. ¿©±â¿¡ »õ·Î¿î ·¹À̾ µµÀԵǴµ¥, ±×°ÍÀº Ŭ¶óÀ̾ðÆ®¿Í ÇÁ·Î¹ÙÀÌ´õÀÇ °áÇÕÀ» ¹æÁöÇÑ´Ù.

¼­¹öÃø °³¹ß¿¡¼­ ÀÌ·¯ÇÑ Á¢±Ù¹æ½ÄÀ» »ç¿ëÇÏ´Â ÆÐÅÏÀ̳ª ¾ÆÅ°ÅØÃĸ¦ ã±â´Â ½±´Ù. ¸î °¡Áö ¿¹¸¦ ÀοëÇÏ¸é ´ÙÀ½°ú °°´Ù:

  • J2EE¸¦ ÀÌ¿ëÇÏ¿© ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö »ó¼¼ º¸´Ù´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» ±¸ÇöÇϴµ¥ ÃÊÁ¡À» ¸ÂÃá´Ù.
  • Data Access Object (DAO) ÆÐÅÏÀº ´ç½ÅÀÌ µ¥ÀÌÅͺ£À̽º¿¡ Á¢±ÙÇÏ´Â ¹æ½ÄÀÇ »ó¼¼¿Í º¹ÀâÇÔÀ» ¼û±ä´Ù. ¿Ö³ÄÇϸé ÀÌ°ÍÀº Ãß»ó ¿µ¼Ó¼º ·¹À̾ ¾×¼¼½ºÇÏ´Â ¹æ½ÄÀ» Á¦°øÇÏ°í µ¥ÀÌÅÍ°¡ ½ÇÁ¦·Î ÀúÀåµÇ´Â Ŭ¶óÀ̾ðÆ® ÄÚµå ³»ÀÇ µ¥ÀÌÅͺ£À̽º À̽´¸¦ ó¸®ÇØ¾ß ÇÒ Çʿ伺À» °æ°¨ÇØÁֱ⠶§¹®ÀÌ´Ù. ÀÌ°ÍÀº Gang of Four (GoF) ÆÐÅÏÀÌ ¾Æ´Ï¸ç SunÀÇ J2EE best practicesÀÇ ÀϺÎÀÌ´Ù.

°¡»óÀÇ °³¹ß ÆÀ ¿¹Á¦¿¡¼­ ±×µéÀº ´ÙÀ½°ú °°Àº ·¹À̾ ã°íÀÖ´Ù:

  • ¸ðµç Á¤±Ô½Ä ±¸Çö µÚ¿¡ °³³äÀ» Ãß»óÈ­ ½ÃŲ´Ù. ÀÌ·¸°Ô µÇ¸é, ÆÀÀº ±×¿Í °°Àº °³³äÀ» ¹è¿ì°í ÀÌÇØÇϴµ¥ ÃÊÁ¡À» ¸ÂÃâ ¼ö ÀÖ´Ù. ±×µéÀÌ ¹è¿ì´Â °ÍÀº ¸ðµç ¾ÖÇø®ÄÉÀÌ¼Ç ¶Ç´Â ¸ðµç ¹öÀü¿¡ Àû¿ëµÉ ¼ö ÀÖ´Ù.

  • ºÎÀÛ¿ë ¾øÀÌ »õ·Î¿î ¶óÀ̺귯¸®¸¦ Áö¿øÇÑ´Ù. Ç÷¯±×ÀÎ ¾ÆÅ°ÅØÃÄ¿¡ ±â¹ÝÇÏ¿© regexp ÆÐÅÏÀ» ½ÇÇàÇÏ´Â ½ÇÁ¦ ¶óÀ̺귯¸®´Â µ¿ÀûÀ¸·Î ¼±ÅÃµÇ°í ¾î´ðÅÍ´Â °áÇÕµÇÁö ¾Ê´Â´Ù. »õ·Î¿î ¶óÀ̺귯¸®´Â »õ·Î¿î ¾î´ðÅÍÀÇ Çʿ伺¸¸À» µå·¯³½´Ù.

  • ´Ù¸¥ ´ë¾Èµé°ú ºñ±³ÇÒ ¼ö ÀÖ´Â ¹æ½ÄÀ» Á¦°øÇÑ´Ù. °£´ÜÇÑ º¥Ä¡¸¶Å© À¯Æ¿¸®Æ¼´Â Àç¹ÌÀÖ´Â ÆÛÆ÷¸Õ½º ÃøÁ¤À» º¸¿©ÁÙ ¼ö ÀÖ´Ù. ±×µéÀÌ °¢°¢ÀÇ ±¸Çö¿ë À¯Æ¿¸®Æ¼¸¦ ½ÇÇàÇÑ´Ù¸é ÆÀÀº °¡Ä¡ÀÖ´Â Á¤º¸¸¦ ¾ò°í ÃÖ»óÀÇ ¼±ÅÃÀ» ÇÒ ¼ö ÀÖ´Ù.

ÁÁÀº »ý°¢ÀÌ´Ù..ÇÏÁö¸¸..
¾î¶² °áÇÕ¹æÁö Á¢±Ù¹æ½ÄÀ̵ç ÃÖ¼ÒÇÑ ÇϳªÀÇ ´ÜÁ¡À» °®°í ÀÖ´Ù. Ŭ¶óÀ̾ðÆ® Äڵ尡 ´ÜÁö ÇϳªÀÇ ±¸Çö¿¡¼­ Á¦°øÇϴ ƯÁ¤ ±â´ÉÀ» ÇÊ¿ä·Î ÇÑ´Ù¸é ¾î¶»°Ô Çϰڴ°¡? ´Ù¸¥ ±¸ÇöÀ» »ç¿ëÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ´ç½ÅÀÇ Äڵ带 °áÇÕÇؾßÇÑ´Ù. ¾ÕÀ¸·Î Çâ»óµÇ°ÚÁö¸¸ Áö±ÝÀ¸·Î¼± ¹æ¹ýÀÌ ¾ø´Ù.

ÀÌ·¯ÇÑ ¿¹´Â ÈçÇÏ´Ù. regexp ¼¼°è¿¡¼­ ƯÁ¤ ±¸Çö¿¡ ÀÇÇؼ­¸¸ Áö¿øµÇ´Â ¸î °¡Áö ÄÄÆÄÀÏ·¯ ¿É¼ÇÀÌ ÀÖ´Ù. ´ç½ÅÀÇ Å¬¶óÀ̾ðÆ® Äڵ尡 ÀÌ·¯ÇÑ Æ¯Á¤ ±â´ÉÀ» ÇÊ¿ä·Î ÇÑ´Ù¸é ÀÌ ÀϹÝÀûÀÎ ·¹À̾î·Î´Â ºÎÁ·ÇÏ´Ù.

Ãß°¡ ·¹À̾ °¢ ±¸ÇöÀÇ Æ¯Á¤ ±â´ÉÀ» Áö¿øÇÏ°í À̸¦ Áö¿øÇÏ´Ï ¾Ê´Â °ÍÀÌ ¼±ÅÃµÇ¸é ¿¹¿Ü¸¦ ÁÖ¾î¾ßÇϴ°¡? ±×°ÍÀº ¼Ö·ç¼ÇÀÌ µÉ ¼ö ÀÖÁö¸¸ ÀϹÝÀûÀÎ Ãß»ó °³³äÀ» Á¤ÀÇÇÏ´Â ¿ø·¡ÀÇ ¸ñÀûÀº ¾Æ´Ï´Ù.

ÇϳªÀÇ GoF ÆÐÅÏÀÌ ÀÌ·¯ÇÑ »óȲ¿¡ ¿Ïº®ÇÏ°Ô ¸ÂÀ» ¼ö ÀÖ´Ù: Ã¥ÀÓ »ç½½(Chain of Responsibility). ÀÌ°ÍÀº µðÀÚÀο¡ ¶Ç ´Ù¸¥ ´ë¾ÈÀ» Á¦½ÃÇß´Ù. ÀÌ·¯ÇÑ Á¢±Ù¹æ½ÄÀ¸·Î Ŭ¶óÀ̾ðÆ® ÄÚµå´Â ¸Þ½ÃÁö³ª ¸í·É¾î¸¦ ±×¿Í °°Àº ¸Þ½ÃÁö¸¦ ó¸®ÇÒ ¼ö ÀÖ´Â ¿£ÅÍƼ ¸®½ºÆ®¿¡ º¸³½´Ù. ÀÌ ¸®½ºÆ® ¾ÆÀÌÅÛÀº üÀÎ(»ç½½)·Î Â¥¿©Á®¼­, ¸Þ½ÃÁö´Â ¼ø¼­´ë·Î 󸮵ǰí üÀÎÀÇ ³¡¿¡ ´Ù´Ù¸£±â Àü¿¡ ¼ÒºñµÉ ¼ö ÀÖ´Ù.

ÀÌ °æ¿ì ƯÁ¤ ±¸Çö¿¡ ÀÇÇؼ­¸¸ Áö¿øµÇ´Â ±¸ÇöÀÌ Æ¯º°ÇÑ À¯ÇüÀÇ ¸Þ½ÃÁö¿¡ ÀÇÇØ ¸ðµ¨¸µ µÉ ¼ö ÀÖ´Ù. ¾ÆÀÌÅÛÀÌ ±×¿Í °°Àº ±â´ÉÀ» ÀνÄÇÏ´ÂÁö¿¡ µû¶ó ÀÌ ¸Þ½ÃÁö¸¦ ´ÙÀ½ °Í¿¡ Àü´ÞÇÒÁöÀÇ ¿©ºÎ´Â ±× üÀÎÀÇ ¾ÆÀÌÅÛ¿¡ ´Þ·ÁÀÖ´Ù.

ÀϹÝÀûÀÎ API Á¤ÀÇÇϱâ
¿©±â¿¡¼­ ¼³¸íÇÑ API´Â RegexpPlugin ÀÌ´Ù. regexp ¶óÀ̺귯¸®¿Í ÄÚµå »çÀÌÀÇ °áÇÕ¹æÁö¸¦ Áö¿øÇÑ´Ù.

RegexpPlugin
API ´ÙÀ½ ¿¹Á¦¿¡¼­ ±¸Ã¼ ±¸Çö(Jakarta Oro)°ú RegexpPlugin »ç¿ëÀÇ Â÷ÀÌÁ¡À» ¿ä¾àÇÏ°Ú´Ù.

¸Å¿ì °£´ÜÇÑ regexpÀ¸·Î ½ÃÀÛÇÏ°Ú´Ù: ÆĽÌÇؾßÇÏ´Â ÅؽºÆ®°¡ »ç¶÷ÀÇ À̸§À̶ó°í »ó»óÇغ¸ÀÚ. ´ç½ÅÀÌ ¹Þ´Â Æ÷¸ËÀº John A. Smith ¿Í °°À» °ÍÀÌ°í À̸§(John)¸¸À» ÃëÇÏ°í ½Í´Ù. ÇÏÁö¸¸ ´Ü¾î°¡ ½ºÆäÀ̽º, ¶óÀÎ ºê·¹ÀÌÅ©, ÅÇ, ¶Ç´Â À̵éÀÇ Á¶ÇÕÀ¸·Î ºÐ¸®µÇ´ÂÁöÀÇ ¿©ºÎ¸¦ ¸ð¸¥´Ù. ±×¿Í °°Àº ÀÎDz Æ÷¸ËÀ» ó¸®ÇÒ ¼ö ÀÖ´Â regexpÀº .*\s*(.*?)\s+.* »ÓÀÌ´Ù.

regexpÀº ´ÙÀ½°ú °°´Ù: ½ºÆäÀ̽º ¾Õ¿¡ ¿À´Â ù ¹ø° ÅؽºÆ®¸¦ ÃëÇ϶ó. ÀÚ¹Ù Äڵ带 ÀÛ¼ºÇغ¸ÀÚ.

ÇÚÁî¿Â
ÀÚ¹Ù ÄÚµå ³»ÀÇ Á¤±Ô½ÄÀ» »ç¿ëÇÏ·Á¸é ´ÙÀ½ÀÇ 7 ´Ü°è¸¦ ¿Ï¼ºÇؾßÇÑ´Ù:

Step 1: ÄÄÆÄÀÏ·¯ ÀνºÅϽº¸¦ ¸¸µç´Ù. Jakarta Oro¸¦ »ç¿ëÇÏ¿© Perl5Compiler¸¦ ÀνºÅϽºÈ­ ÇؾßÇÑ´Ù:


org.apache.oro.text.regex.Perl5Compiler compiler =
    new org.apache.oro.text.regex.Perl5Compiler();

RegexpPlugin¸¦ »ç¿ëÇÏ´Â µ¿ÀÏÇÑ Äڵ嵵 ºñ½ÁÇÏ´Ù:


org.acmsl.regexpplugin.Compiler compiler =
    org.acmsl.regexpplugin.RegexpManager.createCompiler();

Â÷ÀÌÁ¡Àº ÀÖ´Ù. ¾Õ¼­ ¾ð±ÞÇÑ°Í Ã³·³ ÀÌ API´Â ½ÇÁ¦·Î »ç¿ëµÇ´Â ±¸Ã¼ ±¸ÇöÀÌ ¾î¶² °ÍÀÎÁö¸¦ ¼û±ä´Ù. ±¸Ã¼ ±¸ÇöÀ» ¼±ÅÃÇϰųª µðÆúÆ® Jakarta Oro¸¦ ³²°ÜµÑ ¼ö ÀÖ´Ù. ¼±ÅÃµÈ ¶óÀ̺귯¸®¸¦ ·±Å¸Àӽà »ç¿ëÇÒ ¼ö ¾ø´Ù¸é RegexpPlugin API´Â ÀÌ Å¬·¡½º À̸§À» »ç¿ëÇÏ¿© ÄÄÆÄÀÏ·¯¸¦ ¸¸µé±â¸¦ ½ÃµµÇÑ´Ù. ±× ÀÛµ¿ÀÌ ½ÇÆÐÇÏ¸é ¿¹¿Ü¸¦ APIÀÇ Å¬¶óÀ̾ðÆ®·Î µÇµ¹¸°´Ù.

JDK 1.4ÀÇ ºôÆ®ÀÎ regexp Ŭ·¡½º¸¦ »ç¿ëÇÑ´Ù°í °¡Á¤Çغ¸ÀÚ. ±×·¸´Ù¸é ÀüÇô »ç¿ëµÇÁö ¾ÊÀ» Ãß°¡ÀÇ jar ÆÄÀÏÀ» Æ÷ÇÔÇÏ´Â ¾î¶² Æ÷ÀÎÆ®µµ ¾ø´Ù. createCompiler() ¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â °ÍÀ¸·Î´Â ÃæºÐÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ¼±ÅÃµÈ ¶óÀ̺귯¸®°¡ Á¸ÀçÇÏÁö ¾ÊÀ» ¶§¸¶´Ù ¿¹¿Ü¸¦ °ü¸®ÇؾßÇÑ´Ù. ÀÌ ¿¹Á¦´Â ¾÷µ¥ÀÌÆ® µÇ¾ú¾î¾ß Çß´Ù:


try
{
    org.acmsl.regexpplugin.Compiler compiler =
        org.acmsl.regexpplugin.RegexpManager.createCompiler();
}
catch (org.acmsl.regexpplugin.RegexpEngineNorFoundException exception)
{
    [..]
}

Step 2: regexp ÆÐÅÏÀ» ÄÄÆÄÀÏ ÇÑ´Ù. Á¤±Ô½ÄÀº Pattern °´Ã¼·Î ÄÄÆÄÀÏ µÈ´Ù.


org.apache.oro.text.regex.Pattern pattern =
    compiler.compile(".*\\s*(.*?)\\s+.*", Perl5Compiler.MULTILINE_MASK);

½½·¡½Ã (\) ¹®ÀÚ¸¦ ¾ø¾Ö¾ßÇÑ´Ù´Â °ÍÀ» ÁÖ¸ñÇ϶ó.

ÀÌ ÆÐÅÏ °´Ã¼´Â ÅؽºÆ® Æ÷¸Ë¿¡¼­ Á¤ÀÇµÈ Á¤±Ô½ÄÀ» ³ªÅ¸³½´Ù. °¡´ÉÇϸé ÆÐÅÏ ÀνºÅϽº¸¦ Àç»ç¿ëÇ϶ó. regexpÀÌ ÇȽºµÇ¸é ÀÌ ÆÐÅÏÀº Ŭ·¡½º¿¡¼­ Á¤Àû ¸â¹ö°¡ µÉ °ÍÀÌ´Ù.

compile ¸Þ¼Òµå´Â EXTENDED_MASK °°Àº Ç÷¡±×·Î ¼³Á¤µÇ±â¿¡ ¾Ë¸Â´Ù. ÇÏÁö¸¸ RegexpPluginÀº ÀÓÀÇÀÇ Ç÷¡±×¸¦ Çã¿ëÇÏÁö ¾Ê´Â´Ù. À¯ÀÏÇÏ°Ô Áö¿øµÇ´Â °ÍÀº case sensitivity¿Í multilineÀÌ´Ù.

ÄÄÆÄÀÏ·¯ ÀνºÅϽº´Â ƯÁ¤ ¼Ó¼ºÀ» °®°í ÀÖ¾î ±×¿Í °°Àº Ç÷¡±×¸¦ Á¤ÀÇÇÑ´Ù:


compiler.setMultiline(true);

org.acmsl.regexpplugin.Pattern pattern =
    compiler.compile(".*\\s*(.*?)\\s+.*");

Step 3: Matcher °´Ã¼¸¦ ¸¸µç´Ù. Jakarta Oro¿¡¼­ ÀÌ ´Ü°è´Â ¸Å¿ì °£´ÜÇÏ´Ù:


org.apache.oro.text.regex.Perl5Matcher matcher =
    new org.apache.oro.text.regex.Perl5Matcher();

±¸ÇöµÇ¾î¾ß ÇÒ Á¤º¸°¡ ÇÊ¿ä¾ø±â ¶§¹®¿¡ ¸Å¿ì °£´ÜÇÏ´Ù:

Step 4: Á¤±Ô½ÄÀ» Æò°¡ÇÑ´Ù. matcher °´Ã¼´Â Á¤±Ô½ÄÀ» ÀÎÅÍÇÁ¸®ÆÃÇÏ°í ÇÊ¿äÇÑ Á¤º¸¸¦ ÃßÃâÇؾßÇÑ´Ù:


if (matcher.contains("John A. Smith", pattern))
{

ÀÎDz ÅؽºÆ®°¡ Á¤±Ô½Ä°ú ¸ÂÀ¸¸é ÀÌ ¸Þ¼Òµå´Â true¸¦ ¸®ÅÏÇÑ´Ù.

RegexpPlugin API¸¦ »ç¿ëÇϸé ÀÌ ¸ðµç ºÎºÐ¿¡¼­ Â÷ÀÌÁ¡ÀÌ ¾ø´Ù.

Step 5: ù ¹ø° match¸¦ °Ë»öÇÑ´Ù. ÀÌ °£´ÜÇÑ ´Ü°è´Â ´Ü ÇÑÁÙ·Î ÀÌ·ç¾îÁø´Ù:


    org.apache.oro.text.regex.MatchResult matchResult = matcher.getMatch();

·ÎÄà º¯¼ö¸¦ ¼±¾ðÇÏ¿© regexp°ú ¸ÅÄ¡ÇÏ´Â ÅؽºÆ®¸¦ °®°íÀÖ´Â °´Ã¼¸¦ ÀúÀåÇÑ´Ù. µÎ °æ¿ì ¸ðµÎ ÀÌ ´Ü°è´Â °°´Ù. º¯¼ö ¼±¾ðÀ» Á¦¿ÜÇϸé..:


    org.acmsl.regexpplugin.MatchResult matchResult =
        matcher.getMatch();

Step 6: °ü½ÉÀÖ´Â groupÀ» ¼±ÅÃÇÑ´Ù. µÎ °¡Áö Á¢±Ù ¹æ½ÄÀÌ ÀÖ´Ù:

  • ±¸Ã¼(concrete) ¶óÀ̺귯¸®
  • RegexpPlugin API

regexpÀÌ .*\s*(.*?)\s+.*>À̱⠶§¹®¿¡ ´ÜÁö ÇÑ ±×·ìÀÎ (.*?)¸¸À» °®´Â´Ù.

MatchResult °´Ã¼¿¡´Â ¸ðµç ±×·ìÀÌ ¼ø¼­´ë·Î Æ÷ÇԵǾî ÀÖ´Ù. ¾ò°íÀÚ ÇÏ´Â ±×·ìÀÇ À§Ä¡¸¦ ¾Ë¾ÆµÎ¸é µÈ´Ù:


    String name = matchResult.group(1);

    [..]
}

º¯¼öÀÎ name ¿¡´Â ÅؽºÆ® John ÀÌ Æ÷ÇԵǾî Àִµ¥ ÀÌ°ÍÀº Á¤È®È÷ ¿ì¸®°¡ ¿øÇÑ ±×°ÍÀÌ´Ù.

Step 7: ÇÊ¿äÇÏ´Ù¸é ÇÁ·Î¼¼½º¸¦ ¹Ýº¹ÇÑ´Ù.Step 7: ÇÊ¿äÇÏ´Ù¸é ÇÁ·Î¼¼½º¸¦ ¹Ýº¹ÇÑ´Ù.


while (matcher.contains("John A. Smith", pattern))
{

¸ÅÇÎ(Mapping)
ÀϹÝÀûÀÎ Ãß»ó API¸¦ ÀÛ¼ºÇÏ´Â °Í ÀÌ¿Ü¿¡µµ Àڹ٠ȯ°æ¿¡¼­ ÀÌ¹Ì Á¸ÀçÇÏ´Â regexp ¿£Áø¿¡ ´ëÇÑ ¾î´ðÅ͸¦ ±¸ÇöÇؾßÇÑ´Ù.

´ÙÀ½ Å×À̺íÀº ÇϳªÀÇ ¶óÀ̺귯¸®¿¡¼­ ´Ù¸¥ ¶óÀ̺귯¸®·Î ¸¶À̱׷¹ÀÌ¼Ç ÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÏ°í ÀÖ´Ù. ¾î¶² °³³äÀº È®½ÇÇÏÁö ¾Ê´Ù.

Regexp concept GNU Regexp 1.2
Compiler gnu.regexp.RE
Pattern gnu.regexp.RE
Matcher gnu.regexp.REMatchEnumeration
gnu.regexp.RE
Match result gnu.regexp.REMatch
Malformed pattern exception gnu.regexp.REException

Regexp concept Jakarta Oro 2.0.6
Compiler org.apache.oro.text.regex.Perl5Compiler
Pattern org.apache.oro.text.regex.Pattern
Matcher org.apache.oro.text.regex.Perl5Matcher
Match result org.apache.oro.text.regex.MatchResult
Malformed pattern exception org.[..].regex.MalformedPatternException

Regexp concept Jakarta Regexp 1.3
Compiler org.apache.regexp.RE
org.apache.regexp.RECompiler
org.apache.regexp.REProgram
Pattern org.apache.regexp.REProgram
org.apache.regexp.RE
Matcher org.apache.regexp.RE
org.apache.regexp.REProgram
Match result org.apache.regexp.RE
Malformed pattern exception org.apache.regexp.RESyntaxException

Regexp concept JDK 1.4 regex package
Compiler java.util.regex.Pattern
Pattern java.util.regex.Pattern
Matcher java.util.regex.Matcher
Match result java.util.regex.Matcher
Malformed pattern exception java.util.regex.PatternSyntaxException

º¥Ä¡¸¶Å©(Benchmark)

Å×½ºÆ®¸¦ À§ÇØ °³¹ßµÈ º¥Ä¡¸¶Å· À¯Æ¿¸®Æ¼´Â HTML Æļ­¸¦ »ç¿ëÇÏ¿© À¥ ÄÜÅÙÆ®¸¦ ó¸®Çϸ鼭 ¸µÅ©, Çü½Ä, Å×ÀÌºí µî¿¡ ´ëÇÑ Á¤º¸¸¦ ¾÷µ¥ÀÌÆ®ÇÑ´Ù. ÇÏÁö¸¸ Áß¿äÇÑ°ÍÀº ÆÄ½Ì ·ÎÁ÷ÀÌ Á¤±Ô½Ä¿¡ À§ÀӵǾú°í µû¶ó¼­ RegexpPlugin API¸¦ ÅëÇØ ÀÌ·ç¾îÁø´Ù.

ÀÌ º¥Ä¡¸¶Å©´Â ¸Å¿ì ´Ü¼øÇÑ HTML ÆäÀÌÁö¸¦ õ ¹ø ÆĽÌÇÏ´Â °ÍÀ¸·Î ±¸¼ºµÈ´Ù. °á°ú´Â ´ÙÀ½°ú °°´Ù.

Regexp library º¥Ä¡¸¶Å© °á°ú (ÃÊ)
Jakarta Oro 2.0.6 130,71
Jakarta Regexp 1.2 23,261
GNU Regexp 1.1.4 1,966.939
JDK1.4 33,222

½ÇÁ¦ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­´Â ¿©·¯°¡Áö ¹æ½ÄÀ¸·Î ÆÛÆ÷¸Õ½º¸¦ Çâ»ó½Ãų ¼ö ÀÖ´Ù. regexp ¶óÀ̺귯¸®·Î ÀÛ¾÷ÇÒ ¶§ ¸Å¹ø ÆÐÅϵéÀ» ÄÄÆÄÀÏ ÇÒ ÇÊ¿ä°¡ ¾ø´Ù´Â °ÍÀÌ °¡Àå Áß¿äÇÏ´Ù. ´ë½Å ±×µéÀ» ÄÄÆÄÀÏÇÏ°í °¢°¢ÀÇ ÀνºÅϽºµéÀ» Àç»ç¿ë ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ regexpÀÌ ÇȽºµÇÁö ¾ÊÀ¸¸é ÄÄÆÄÀÏ ÀÛ¾÷Àº ¹«½ÃµÈ´Ù.

¿ä¾à
Á¤±Ô½Ä Æļ­´Â °­·ÂÇÏ´Ù. ÆÀÀÌ ¾ÈÁ¤µÇ°í ÆÄ½Ì ·ÎÁ÷ÀÌ ¹ßÀüÇÏ¸é °ü¸®°¡ ¼ö¿ùÇÏ´Ù. ÇÏÁö¸¸ °³¹ßÀÚµéÀº regexp ½ÅÅýº¸¦ ÀÌÇØÇÏ¿© ±×¿Í °°Àº Äڵ尡 ¾î¶»°Ô ÀÛµ¿µÇ´ÂÁö¸¦ ¾Ë¾Æ¾ßÇÑ´Ù.

Âü°íÀÚ·á

¸ñ Â÷:
Introduction
¹è°æ
°áÇÕ¹æÁö(decoupling)ÀÇ ÀÌÁ¡
ƯÁ¤ ±¸Çö¿¡ ´ëÇÑ ÀÇÁ¸¼ºÀ» ÇÇÇÒ °Í
ÁÁÀº »ý°¢ÀÌ´Ù..ÇÏÁö¸¸..
ÀϹÝÀûÀÎ API Á¤ÀÇÇϱâ
RegexpPlugin
ÇÚÁî¿Â
¸ÅÇÎ(Mapping)
º¥Ä¡¸¶Å©(Benchmark)
¿ä¾à
°ü·Ã dW ¸µÅ©:
Magic with Merlin: Parse sequences of characters with the new regex library
XP Distilled: Greater success on your Java projects
Demystifying Extreme Programming, part 1
Demystifying Extreme Programming, part 2
Subscribe to the developerWorks newsletter
US ¿ø¹® Àбâ
Also in the Java zone:
Tutorials
Tools and products
Code and components
Articles
ÇÊÀÚ¼Ò°³
Jose San Leandro Armendariz J2EE ÇÁ·ÎÁ§Æ®¿¡ ¸¹Àº °æÇèÀÌ ÀÖ´Ù.
ÀÌ ±â»ç¿¡ ´ëÇÏ¿© ¾î¶»°Ô »ý°¢ÇϽʴϱî?

Á¤¸» ÁÁ´Ù (5) ÁÁ´Ù (4) ±×Àú±×·¸´Ù (3) ¼öÁ¤º¸¿ÏÀÌ ÇÊ¿äÇÏ´Ù(2) ÇüÆí¾ø´Ù (1)

  È¸»ç¼Ò°³  |  °³ÀÎÁ¤º¸ º¸È£Á¤Ã¥  |  ¹ý·ü  |  ¹®ÀÇ