php string matching with wildcard *? php string matching with wildcard *? php php

php string matching with wildcard *?


There is no need for preg_match here. PHP has a wildcard comparison function, specifically made for such cases:

fnmatch()

And fnmatch('dir/*/file', 'dir/folder1/file') would likely already work for you. But beware that the * wildcard would likewise add further slashes, like preg_match would.


You should just use .* instead.

$pattern = str_replace( '*' , '.*', $pattern);   //> This is the important replace

Edit: Also your ^ and $ were in the wrong order.

<?phpfunction stringMatchWithWildcard($source,$pattern) {    $pattern = preg_quote($pattern,'/');            $pattern = str_replace( '\*' , '.*', $pattern);       return preg_match( '/^' . $pattern . '$/i' , $source );}$mystring = 'dir/folder1/file';$pattern = 'dir/*/file';echo stringMatchWithWildcard($mystring,$pattern); $mystring = 'string bl#abla;y';$pattern = 'string*y'; echo stringMatchWithWildcard($mystring,$pattern); 

Working demo: http://www.ideone.com/mGqp2


.+?

Causes non-greedy matching for all characters. This is NOT equal to "*" becuase it will not match the empty string.

The following pattern will match the empty string too:

.*?

so...

stringMatchWithWildcard ("hello", "hel*lo"); // will give true