Сопоставление строки php с подстановочным знаком *?

Я хочу дать возможность сопоставить строку с подстановочным знаком * .

Пример

$mystring = 'dir/folder1/file';
$pattern = 'dir/*/file';

stringMatchWithWildcard($mystring,$pattern);  //> Returns true

Пример 2:

$mystring = 'string bl#abla;y';
$pattern = 'string*y'; 

stringMatchWithWildcard($mystring,$pattern);  //> Returns true

Я подумал, что-то вроде:

function stringMatch($source,$pattern) {
    $pattern = preg_quote($pattern,'/');        
    $pattern = str_replace( '\*' , '.*?', $pattern);   //> This is the important replace
    return (bool)preg_match( '/^' . $pattern . '$/i' , $source );
}

В основном замена * на . *? (учитывая в * nix окружение * соответствует пустой строке) © vbence

Какие-либо улучшения / предложения?

// Добавлен return (bool) , потому что preg_match возвращает int

30
задан dynamic 28 May 2011 в 17:56
поделиться