Edited at

pcreを使って正規表現マッチを行う

More than 3 years have passed since last update.


流れ


  1. pcre_compile() で条件をコンパイルする

  2. pcre_exec() で比較する

  3. pcre_free() でコンパイルした条件を解放

同じ条件で比較を繰り返すならば、pcre_cpmileを一回だけ行いpcreオブジェクトを共有すれば実行効率が良い

パターンが正しくない時はpcre_compile()はNULLを返す

errStrにエラーメッセージが入る

使用済になったオブジェクトはpcre_freeで必ず解放すること


ソースコード


pcre_match.c

#include <stdio.h>

#include <stdlib.h>
#include <string.h>
#include <pcre.h>

int
pcre_match(const char *subj, char *pattern)
{
int matched;
pcre *re;
const char* errStr;
int errOffset;
int ovector = 0;

re = pcre_compile(pattern, PCRE_EXTENDED, &errStr, &errOffset, NULL);
if(re == NULL) {
fprintf(stderr, "pcre pattern matching compile error: message[%s]\n", errStr);
return -1;
}

matched = pcre_exec(re, NULL, subj, (int)strlen(subj), 0, 0, &ovector, 1);
pcre_free(re);

if (matched < 0) {
return 0;
}

return 1;
}

int
main(int argc, char *argv[])
{
if (pcre_match("http://foobar.example.com/", "(^http|^https)://") == 1) {
printf("matched\n");
} else {
printf("unmatched\n");
}

return 0;
}



コンパイル


$ gcc -o pcre_match pcre_match.c -lpcre


詳しい使用方法

オンラインマニュアルを参照


$ man pcre_exec

pcreが持っている関数の一覧


$ man -k pcre