前陣子開發一些底層程式,需要使用一些彈性高的 Regular Expressions ,然後很隨意地 Google 有無可用的 lib ,一時之間就只使用了 regex 啦,後來發現,其實還有 pcre 可用囉!
另外,此次實作我參考了 在 C 程式中,使用 Regex (Regular Expression) library ,我覺得挺夠用的!另外,對於 Regular Expressions 不熟悉的,我倒常去這邊逛逛,挺受用的。
這次使用上的心得,大至如下:
- At FreeBSD 7.0
- #include <regex.h>
#include <ctype.h>
#defined nmatch 1 // 取 1 個 match - 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 ]; - if( regcomp( & preg , pattern , regex_flag ) != 0 )
{
fprintf( stderr , "regexp comp error.\n" );
exit(1);
} - * 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 );
}
} - regfree(&preg);
下次再來試 pcre 好了。
沒有留言:
張貼留言