This was a bit rushed but here is my version of the Wildcard Finder

I hope it works as you want it to work.
PHP Code:
function onCreated() {
temp.a = {"foo1231594","foo437793","bar1234","bar4321","moo4567"};
temp.r = findWildcard("foo*3*9*",temp.a); // foo1231594,foo437793
}
PHP Code:
function findWildcard(syntax,array) {
if (temp.syntax == "*")
return temp.array;
if (temp.syntax.pos("*") == - 1)
return (temp.array.index(temp.syntax) > - 1 ? temp.array[temp.array.index(temp.syntax)] : false);
temp.newsyntax = {};
this.syntaxend = !temp.syntax.ends("*");
while (temp.syntax.pos("*") > - 1) {
if (!(temp.syntax.pos("*") in {0,temp.syntax.length()}))
temp.newsyntax.add(temp.syntax.substring(0,temp.syntax.pos("*")));
temp.syntax = temp.syntax.substring(temp.syntax.pos("*") + 1);
}
if (temp.syntax != "")
temp.newsyntax.add(temp.syntax);
temp.copysyntax = {};
for (temp.s: temp.newsyntax) {
temp.r = "";
for (temp.l = 0; temp.l < temp.s.length(); temp.l ++)
temp.r @= "*";
temp.copysyntax.add(temp.r);
}
this.syntax = temp.newsyntax;
this.syntaxcopy = temp.copysyntax;
temp.result = {};
for (temp.checktext: temp.array) {
temp.check = checkText(temp.checktext);
if (temp.check != false)
temp.result.add(temp.check);
}
return (temp.result.size() > 0 ? temp.result : false);
}
function checkText(realtext) {
if (this.syntaxend && !temp.realtext.ends(this.syntax[this.syntax.size() - 1]))
return false;
temp.highest = - 1;
temp.checktext = temp.realtext;
for (temp.c = 0; temp.c < this.syntax.size(); temp.c ++) {
temp.checkpart = this.syntax[temp.c];
if (temp.checktext.pos(temp.checkpart) == - 1)
return false;
if (temp.checktext.pos(temp.checkpart) > temp.highest) {
temp.checkpos = temp.checktext.pos(temp.checkpart);
temp.checktext = temp.checktext.substring(0,temp.checkpos) @
this.syntaxcopy[temp.c] @
temp.checktext.substring(temp.checkpos + this.syntaxcopy[temp.c].length());
temp.highest = temp.checkpos;
}
else
return false;
}
return temp.realtext;
}