Click here to Skip to main content
Click here to Skip to main content
Alternative Tip

Tagged as

Use wildcard characters * and ? to compare strings

, 20 Feb 2012
Rate this:
Please Sign up or sign in to vote.
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) +...
This is an old version of the currently published tip/trick.

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...

BTW: If non-greedy approach is needed (as most of the wildcard implementations are), one can easily change the ".*" string into ".*?" and get the non-greedy behaviour.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Andreas Gieriet
Founder eXternSoft GmbH
Switzerland Switzerland
I feel comfortable on a variety of systems (UNIX, Windows, cross-compiled embedded systems, etc.) in a variety of languages, environments, and tools.
I have a particular affinity to computer language analysis, testing, as well as quality management.
 
More information about what I do for a living can be found at my LinkedIn Profile and on my company's web page (German only).
Follow on   LinkedIn

Comments and Discussions


Discussions posted for the Published version of this article. Posting a message here will take you to the publicly available article in order to continue your conversation in public.
 
-- There are no messages in this forum --
| Advertise | Privacy | Mobile
Web01 | 2.8.140827.1 | Last Updated 20 Feb 2012
Article Copyright 2012 by Andreas Gieriet
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid