65.9K
CodeProject is changing. Read more.
Home

Use wildcard characters * and ? to compare strings

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2 votes)

Feb 20, 2012

CPOL
viewsIcon

9387

How about transforming first into a Regex and then letting the Regex do the work? E.g.:public static Regex GetRegex(string wildcard){ string pattern = Regex.Replace(wildcard, @"([^?*]+)?([?*])?", m => Regex.Escape(m.Groups[1].Value) +...

How about transforming first into a Regex and then letting the Regex do the work? E.g.:

public static Regex GetRegex(string wildcard)
{
    string pattern = Regex.Replace(wildcard, @"([^?*]+)?([?*])?",
                 m => Regex.Escape(m.Groups[1].Value)
                    + (m.Groups[2].Value == "?"
                    ? "."
                    : m.Groups[2].Value == "*"
                    ? ".*?"
                    : ""));
   return new Regex(pattern, RegexOptions.Compiled);
}
...
string wildcard = "..."; // E.g. "a$bc?ef*?z?*a";
var regex = GetRegex(wildcard);
...
string input = "...";
if (regex.Match(input).Success)
{
    ...
}

This could be an alternative approache depending on the situation. E.g., if you get the wildcard from outside, and if you apply the same pattern to many elements.

It would be interesting to see a performance comparison...

[EDIT] I've adjusted the "*" wildcards by non-greedy match since this emulates more closely the wildcard behaviour.