Spaghetti Source logo

ワイルドカードつきマッチング

説明

任意の1文字にマッチする記号 ? と,任意の 0 文字以上にマッチする記号 * を許したとき,text と pattern が同一であるかどうかを判定する.

text の任意の場所に pattern が入ることは,"*pattern*" という文字列でマッチングを取ればよい.

使い方

bool match(char *text, char *pattern)
文字列 text が pattern にマッチするかどうかを返す.

ソースコード

bool match(char *text, char *pattern) {
  switch (*pattern) {
    case '\0': return !*text;
    case '*' : return match(text, pattern+1) ||
                      *text && match(text+1, pattern);
    case '?' : return *text && match(text+1, pattern+1);
    default  : return (*text == *pattern) &&
                      match(text+1, pattern+1);
  }
}

前原 貴憲(maehara@prefield.com).

Last Modified: 2007.11.17 22:35:45.