2008年12月29日 星期一

[C] C 語言,使用 Regular Expressions

前陣子開發一些底層程式,需要使用一些彈性高的 Regular Expressions ,然後很隨意地 Google 有無可用的 lib ,一時之間就只使用了 regex 啦,後來發現,其實還有 pcre 可用囉!



另外,此次實作我參考了 在 C 程式中,使用 Regex (Regular Expression) library ,我覺得挺夠用的!另外,對於 Regular Expressions 不熟悉的,我倒常去這邊逛逛,挺受用的。



這次使用上的心得,大至如下:



  1. At FreeBSD 7.0

  2. #include <regex.h>
    #include <ctype.h>
    #defined nmatch 1 // 取 1 個 match

  3. int regex_flag = REG_EXTENDED | REG_ICASE ;
    regex_t preg;
    char * pattern = "[A-Z0-9\\._%+-]+@[A-Z0-9\\.-]+\\.[A-Z]{2,4}"; // 簡單的 Email 格式
    regmatch_t pmatch[ nmatch ];

  4. if( regcomp( & preg , pattern  , regex_flag ) != 0 )
    {
        fprintf( stderr , "regexp comp error.\n" );
        exit(1);
    }

  5. * data_length = 0;
    if( regexec( &preg , str , nmatch , pmatch , 0 ) == 0 )  // 非 0 為 no match
    {
        for( i = 0; i < nmatch && pmatch[i].rm_so >= 0 ; ++i )
        {
            * data_length = pmatch[i].rm_eo - pmatch[i].rm_so;  // 透過 *data_length 得知資料該取的長度
            return ( str + pmatch[i].rm_so );
        }
    }

  6. regfree(&preg);


下次再來試 pcre 好了。


沒有留言:

張貼留言