最近有需要用到wildcard,
所以就來看一下wildcard的suport。
但是往往是support unix版的wildcard,
或者應該說M$所 support 的wildcard 比較奇怪。
因為當你用 "*.*" 比對時,
它會不管你有沒有".",
直接當成 "*" 在比對,
例如:
"t*.*" -> 要找 prefix 是 "t"
在unix下,通常會比對到的是prefix 是 t ,
而且中間一定要有一個 "." 。
在windows則只需要prefix是 "t" 就會比對到了。
在codeproject上,
我改了一點點,
讓這個 wildcard support 可以符合 M$ 的 wildcard 。
原始碼如下:
#include <stdio.h>
#include <stdlib.h>
int wildcmp(const char *wild, const char *string) {
// Written by Jack Handy - jakkhandy@hotmail.com
const char *cp = NULL, *mp = NULL;
while ((*string) && (*wild != '*')) {
if ((*wild != *string) && (*wild != '?')) {
return 0;
}
wild++;
string++;
}
while (*string) {
if (*wild == '*') {
if (!*++wild) {
return 1;
}
mp = wild;
cp = string+1;
} else if ((*wild == *string) || (*wild == '?')) {
wild++;
string++;
} else {
wild = mp;
string = cp++;
}
}
// modified by porpoise
if (mp == wild && *wild == '.' && *(wild+1) == '*') {
do {
wild+=2;
} while (*wild == '.' && *(wild+1) == '*');
}
while (*wild == '*') {
wild++;
}
return !*wild;
}
int main()
{
char *wild = "w*.*.*.*.*";
char *string ="wtest";
int rc;
rc = wildcmp(wild, string);
printf("wildcmp(%s,%s)=%d\n",wild, string,rc);
return 0;
}