Perl5 regexp ¶óÀ̺귯¸®¸¦ »ç¿ëÇϱâ À§ÇØ ÀϹÝÀûÀÎ API ¸¸µé±â
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 ½ÅÅýº¸¦ ÀÌÇØÇÏ¿© ±×¿Í °°Àº Äڵ尡 ¾î¶»°Ô
ÀÛµ¿µÇ´ÂÁö¸¦ ¾Ë¾Æ¾ßÇÑ´Ù.
Âü°íÀÚ·á
|