前陣子開發一些底層程式,需要使用一些彈性高的 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 好了。


創作者介紹
創作者 changyy 的頭像
changyy

第二十四個夏天後

changyy 發表在 痞客邦 留言(0) 人氣()