UNIX/Linuxの部屋 関数:regfree

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




関数 regfree 正規表現ライブラリ このエントリーをはてなブックマークに追加

正規表現ライブラリには、いくつかのタイプがあるらしい。FreeBSD には BSD 系の regex ライブラリが付属する。Linux には GNU regex ライブラリが付いてくる (と思う。未確認)。

以下のサンプルは、簡易 grep である。
main( int argc, char *argv[] ){
char buf[256];
static regex_t preg;
regmatch_t pmatch[10];
int i;
int regerr;
char errbuf[256];

if ( argc < 3 ){
fprintf(stderr, "mygrep pattern file [file..]\n");
exit(1);
}

regerr = regcomp(&preg, argv[1], REG_EXTENDED);
if (regerr) {
regerror(regerr, &preg, errbuf, sizeof(errbuf));
fprintf(stderr, "%s\n", errbuf);
regfree(&preg);
exit(1);
}

for ( i=2; i<argc; i++ ){
int line = 1;
FILE *fp;
char *filename;

filename = argv[i];
printf("file=%s\n", filename);

fp = fopen(filename, "r");
if ( fp == NULL ){
fprintf(stderr, "Can't open %s\n", filename);
exit(1);
}
while (1){
if ( fgets(buf, sizeof(buf), fp) == 0 ){
break;
}
regerr = regexec(&preg, buf, 0, 0, 0);
if (!regerr) {
printf("%s:%d:%s", filename, line, buf);
}
line++;
}
}

regfree(&preg);
}