Matching strings to wildcards pattern is useful and often needed. Using regular expression may help, but is not top performance solution. Wildcard class matches strings to wildcard patterns using * and ? characters, and that does very fast and good!

Matching strings

Here are some examples:

    Wildcard.match("CfgOptions.class", "*C*g*cl*");         // true   
    Wildcard.match("CfgOptions.class", "*g*c**s");          // true!   
    Wildcard.match("CfgOptions.class", "??gOpti*c?ass");    // true   
    Wildcard.match("CfgOpti*class", "*gOpti\\*class");      // true   
    Wildcard.match("CfgOptions.class", "C*ti*c?a?*");       // true

Matching file paths

Wildcard class supports path matching wildcards. It matches path against pattern using *, ? and ** wildcards. Both path and the pattern are tokenized on path separators (\ and /). '**' represents deep tree wildcard, as in Ant.

    Wildcard.matchPath("/foo/soo/doo/boo", "/**/bo*");          // true
    Wildcard.matchPath("/foo/one/two/three/boo", "**/t?o/**");  // true

Wildcards in Jodd

Wildcard matching is used on many places in Jodd. As the general rule-of-the-thumb, everywhere where file paths are involved in scanning and matching, the matchPath() method is used, otherwise, the classic path().