ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. PCRE
perlÀº ´Ù¸¥ ¾ð¾î¿¡¼´Â ã¾Æº¸±â Èûµç ¸Å¿ì °·ÂÇÑ Á¤±ÔÇ¥Çö½ÄÀ» Á¦°øÇÑ´Ù. ¹°·Ð PHP¿Í Pythonµµ Á¤±ÔÇ¥Çö½ÄÀ» Á¦°øÇϱä ÇÏÁö¸¸, perl¿¡¼ÀÇ Á¤±ÔÇ¥Çö½ÄÀÌ ¿ª»çµµ ¿À·¡µÇ¾ú°í °ÅÀÇ Ç¥ÁØÀÌ´Ù º¸´Ï °í¹«½Å¿¡ ¾çº¹À» ÀÔÈù ´À³¦À̶ö±î ±×·± ´À³¦ÀÌ µå´Â °æ¿ì°¡ ÀÖ´Ù. ±×·¡¼ Á¤±ÔÇ¥Çö½ÄÀ» ÀÌ¿ëÇØ¾ß ÇÒ °æ¿ì¿¡´Â ¿©ÀüÈ÷ PerlÀ» »ç¿ëÇÑ´Ù.
C/C++Àº ¾î¶±ÇØ¾ß Çϳª. Áַ¾ð¾î°¡ C/C++ÀÌ´Ù º¸´Ï, C¾ð¿¡¼µµ »ç¿ëÇÒ ¼ö ÀÖ´Â Á¤±ÔÇ¥Çöµµ±¸°¡ ÀÖÀ¸¸é ÇÏ´Â°Ô ¹Ù·¥À̾ú´Ù. regex°¡ ÀÖ±ä ÇÏÁö¸¸, PerlÀÇ °·ÂÇÔ¿¡ ºñÇÏ¸é »ç¿ëÇϱⰡ ¿©°£ ºÒÆíÇÑ°Ô ¾Æ´Ï´Ù. ƯÈ÷ perlÀÇ Ä¡È¯ ´É·ÂÀ» »ý°¢Çϸé..
±×·¯´Ù°¡ ±¸±Û½Å¿¡ ¹°¾î¹°¾î PCRE¶ó´Â Á¤±ÔÇ¥Çö ¶óÀ̺귯¸®¸¦ ã°Ô µÇ¾ú´Ù. ¹«·Á Perl Compatible Regular ExpressionsÀ̶õ´Ù. ³»°¡ ¿øÇÏ´Â°Ô ÀÌ°Í ¾Æ´Ò±î ¶ó´Â »ý°¢ÀÌ µé¾ú´Ù. ¾Ë¾Æ ºÃ´õ´Ï Apache, PHP, KDE, Postfix, Nmap, Analogµî ÀÌ¹Ì ¸¹Àº ÇÁ·Î±×·¥¿¡¼ »ç¿ëµÇ´Â ¶óÀ̺귯¸® ¿´´Ù. ³ª¸¸ ¸ð¸£°í ÀÖ¾ú±º T.T PCRECPP
PCRECPP´Â PCREÀÇ C++ wrapper ÇÔ¼ö·Î ±¸±Û¿¡¼ Á¦°øÇÑ´Ù. ¾î´À ¶óÀ̺귯¸®¸¦ »ç¿ëÇØµµ °ü°è ¾ø°ÚÀ¸³ª. wrapperÀÎ ¸¸Å ġȯµî Á» ´õ ±¤¹üÀ§ÇÑ ±â´ÉÀ» Áö¿øÇϰí ÀÖ¾î¼ PCRECPP¸¦ Á¤±ÔÇ¥Çö/ġȯ ¶óÀ̺귯¸®·Î »ç¿ëÇϱâ·Î Çß´Ù.
Âü°í·Î ÀÌ ¶óÀ̺귯¸®´Â »ç¿ë¹æ¹ýÀ» ÀÍÈ÷´Â°Ô Áß¿äÇÑ°Ô ¾Æ´Ù. ÆÞ Á¤±ÔÇ¥ÇöÀ» ÀÍÈ÷´Â°Ô Áß¿äÇÏ´Ù. ¼³Ä¡
¿ìºÐÅõ ¸®´ª½º¿¡¼ ÆÐŰÁö °ü¸®ÀÚ·Î °£´ÜÇÏ°Ô ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. # sudo apt-get install libpcre++0 # sudo apt-get install libpcre++-dev ÀÎŬ·çµå#include <pcrecpp.h> ÄÄÆÄÀÏ# g++ -o pcrecpptest pcrecpptest.cc -lpcrecpp Ç® ¸ÅĪ
FullMatch´Â ÆÐÅÏÀÌ ¹®ÀÚ¿°ú Á¤È®È÷ ÀÏÄ¡ÇÏ´ÂÁö¸¦ È®ÀÎÇÑ´Ù. // ¿ÏÀü ÀÏÄ¡ ÇϹǷΠ1À» ¹ÝȯÇÑ´Ù. pcrecpp::RE re("h.*o"); cout << re.FullMatch("hello") << endl; // ºÎºÐ ÀÏÄ¡ÇϹǷΠ0À» ¹ÝȯÇÑ´Ù. pcrecpp::RE re("e"); cout << re.FullMatch("hello") << endl;¹®ÀÚ¿Àº const char *¿Í string ¸ðµÎ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
¸ÅĪµÈ ¹®ÀÚ¿À» µû·Î ÀúÀåÇÒ ¼öµµ ÀÖ´Ù. ¹®ÀÚ¿ "ruby:1234"ÀÌ ÀÖ°í, ruby¿Í 1234¸¦ µû·Î ÀúÀåÇÏ±æ ¿øÇÑ´Ù¸é, ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù. ÀÌ°É regex³ª Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇØ¼ ÀÛ¾÷ÇÒ °ÍÀ» »ý°¢Çغ¸¸é, ²Ï³ª ²ûÂïÇÒ °Í °°´Ù. int i;
string s;
pcrecpp::RE re("(\\w+):(\\d+)");
re.FullMatch("ruby:1234", &s, &i);
cout << s << " " << i << endl;
ºÎºÐ ¸ÅĪ
ºÎºÐÀÏÄ¡¸¦ ã±â ¿øÇÑ´Ù¸é PartialMatch¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù. cout << pcrecpp::RE("ell").PartialMatch("hello") << endl;
óÀ½ ÀÏÄ¡ÇÏ´Â ¼ýÀÚ¸¦ °¡Á®¿À´Â ¿¹Á¦ int number;
pcrecpp::RE re("(\\d+)");
re.PartialMatch("x * 100 + 20", &number);
assert(number == 100);
cout << number << endl;
Á¤±ÔÇ¥Çö½Ä ±ÔÄ¢ ¼öÁ¤
Perl Á¤±ÔÇ¥Çö½ÄÀ» º¸¸é ¿£Áø ±ÔÄ¢À» ¼öÁ¤Çϱâ À§ÇÑ ¿©·¯°¡Áö ±ÔÄ¢µéÀ» Á¦°øÇÑ´Ù. PCRECPP´Â RE_OptionsÀ» ÀÌ¿ëÇØ¼ ÀÌ·¯ÇÑ ÀϵéÀ» ÇÒ ¼ö ÀÖ´Ù. °³ÀÎÀûÀ¸·Î caseless¸¦ °¡Àå ¸¹ÀÌ ¾´´Ù.
´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù. RE_options opt; opt.set_caseless(true); if (RE("HELLO", opt).PartialMatch("hello world")) RE(pattern, RE_Options(PCRE_CASELESS|PCRE_MULTILINE)).PartialMatch(str); Scanning Text Incrementally
Consume ¿¬»êÀº ¹®¼¸¦ ¾ÕÀ¸·Î ÀÐÀ¸¸é¼ ¹Ýº¹ÀûÀ¸·Î ÆÐÅϸÅĪÀ» Àû¿ëÇϰíÀÚ ÇÒ¶§ À¯¿ëÇÏ´Ù. ¿¹¸¦µé¾î ´ÙÀ½°ú °°Àº ¼³Á¤ÆÄÀÏÀ» ÀÐÀ» ¶§ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Key1=value1 Key2=value2 Key3=value3 ...
ÀÀ¿ë ¿¹ string var; int value; string contents="year=1985\nage=25\nbuy=1000\nnation=1022\n"; pcrecpp::StringPiece input(contents); pcrecpp::RE re("(\\w+)=(\\d+)\n"); while(re.Consume(&input, &var, &value)) { cout << var << " : " << value << endl; } ¹®ÀÚ¿ ġȯ
¹®ÀÚ¿ ġȯ ±â´Éµµ Á¦°øÇÑ´Ù. ¹°·Ð Áö±Ý±îÁöÀÇ ÇÔ¼öµé¸¸À¸·Îµµ °¡´ÉÇϱä ÇÏÁö¸¸, ±¸ÇöÇÒ·Á¸é ¿©°£ ±ÍÂúÁö ½Í´Ù. string s = "yabba dabba doo";
cout << "Result " << pcrecpp::RE("b+").Replace("d", &s) << endl;
cout << s << endl;
°£´ÜÇØ¼ ÁÁ´Ù. Replace´Â óÀ½ ¸ÅĪµÈ ÆÐÅϸ¸À» ġȯÇÑ´Ù. ¸ðµç ÆÐÅÏ¿¡ ´ëÇØ¼ ÀÏÄ¡ÇÒ·Á¸é GlobalReplace¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. perlÀÇ "\g"¿Í ºñ½ÁÇÑ ÀÏÀ» ÇÑ´Ù. string s = "yabba dabba doo";
cout << "Result " << pcrecpp::RE("b+").GlobalReplace("d", &s) << endl;
cout << s << endl;
¿¹Á¦
HTML ¹®¼¿¡¼ joinc.co.kr·Î °¡´Â ¸µÅ©¸¦ my.co.kr/redirect/joinc.co.kr·Î ġȯÇÑ´Ù.
#include <pcrecpp.h> #include <string.h> #include <stdio.h> #include <iostream> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> using namespace std; #define READ_LINE 32 #define MAX_BUF READ_LINE * 2 int main(int argc, char **argv) { int fd=0; char buf[MAX_BUF]; string s; string redirect = "http://my.co.kr/redirect/"; string replace_rule = "\\1=\\2"+redirect+"\\3\\4"; pcrecpp::RE_Options opt; opt.set_caseless(true); fd = open("test.html", O_RDONLY); memset(buf, 0x00, MAX_BUF); while(read(fd, buf, READ_LINE) > 0) { s = buf; pcrecpp::RE("(src|href|action|xmlns|url)=([\'\"])*http://([a-zA-Z0-9\\-\\_\\.]*)(joinc\\.co\\.kr)",opt).GlobalReplace(replace_rule,&s); cout << s; memset(buf, 0x00, MAX_BUF); } } ¾à°£ÀÇ ¹®Á¦
ÆÐÅÏÀ» °Ë»öÇÒ ¶§¿¡´Â ÇöÀç ¹öÆÛÀÇ ³»¿ë¸¸À» °Ë»öÇÑ´Ù. À§ ÇÁ·Î±×·¥À» ¿¹·Î µéÀÚ¸é ´ÙÀ½°ú °°Àº °æ¿ì ÆÐÅÏÀ» ÀÏÄ¡ÇÏÁö ¸øÇÑ´Ù. ¹öÆÛ¸¦ ÀÛ°Ô ÇÒ °æ¿ì ÇÏÇÊ ¿î³ª»Ú°Ô ÆÐÅÏÀÌ ÀÏÄ¡ÇØ¾ßÇÒ ºÎºÐÀÌ Â©¸®´Â ¹Ù¶÷¿¡, °Ë»öÀ» ¸øÇÏ´Â °æ¿ì°¡ »ý±æ ¼ö ÀÖ´Ù.
<¹öÆÛ> .... <a href=http://www.joinc.co. </¹öÆÛ>À̸¦ ÇØ°áÇϱâ À§ÇÑ ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù.
![]() |
|
||||||||||||||||||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|