All pastes #1228357 Raw Edit

Wildcard String Matching / By Ai

public cpp v1 · immutable
#1228357 ·published 2008-10-16 13:32 UTC
rendered paste body
//Wildcard String matching, wrote by Aikar@windower.netbool strmatchwc(const char* pattern, const char* string, bool Escape = false){	static int i = 0;	if(!pattern || !string) return false;	if(!*pattern || !*string)	{		if(!*pattern && !*string)		{			return true;		}else{			return false;		}	}	while(*pattern)	{		if(!*string)		{			if(*pattern == '*' && strlen(pattern) == 1)			{				return true;			}else{				return false;			}		}		switch(*pattern)		{		case '?':			{				if(!Escape)				{					string++;					pattern++;					break;				}			}		case '\\':			{				if(!Escape)				{					Escape = true;					pattern++;					break;				}			}		case '*':			{				if(!Escape)				{					if(!*(pattern + 1))					{						return true;					}else{						bool bEscape = false;						if(*(pattern + 1) == '\\')						{							pattern++;							bEscape = true;						}						while(true)						{							if(*(pattern+1) != '?')	string = strchr(string,*(pattern + 1));							if(!string || !*string) return false;							if(strmatchwc(pattern+1,string++,bEscape)) return true;						}					}					break;				}			}		case '[':			{				if(!Escape)				{					if(strlen(pattern) >= 4)					{						if(*(pattern + 3) == ']' && *(pattern + 1) == '?')						{														unsigned char v = (*(pattern + 2) - '0');							if(v > strlen(string)) return true;							string += v;							pattern += 4;							break;						}						if(strlen(pattern) >= 5)						{							if(*(pattern + 4) == ']' && *(pattern + 2) == '-')							{								if(*string < *(pattern + 1) || *string > *(pattern + 3))								{									return false;								}else{									pattern += 5;									string++;								}								break;							}						}					}				}			}		default:			{				Escape = false;				if(!*pattern || !*string)				{					if(!*pattern && !*string)					{						return true;					}else{						return false;					}				}								if(*pattern == *string)				{					pattern++;					string++;				}else{					return false;				}			}		}	}	if(!*pattern && !*string)	{		return true;	}else{		return false;	}}