2013-10-15 3 views
0

Если у вас естьМожно ли сравнить две строки, игнорируя один из символов php?

$str1 = "h*llo"; 
$str2 = "hello"; 

является возможность быстро сравнить их без необходимости предварительного удаления * от str1 и согласующий индексируется символ из str2?

решение необходимо будет работать независимо от того, сколько * в строке, например:

$str1 = "h*l*o"; 
$str2 = "hello"; 

Спасибо за взглянуть.

+1

Вы ищете [ 'fnmatch()'] (http://php.net/fnmatch). – mario

+0

Возможный дубликат [соответствия строки php с подстановочным знаком \ *?] (Http://stackoverflow.com/questions/6163055/php-string-matching-with-wildcard) – mario

+0

@mario Не знал об этой функции! Вероятно, более полный/более быстрый/лучший общий метод, чем использование регулярных выражений. –

ответ

2

Да, с регулярным выражением, а точнее preg_match для PHP. То, что вы ищете, это «подстановочные знаки».

Это тестировался, но должен работать для вас:

$str1 = "h*llo"; 
$str2 = "hello"; 

//periods are a wildcards in regex 
if(preg_match("/" . preg_quote(str_replace("*", ".*", $str1), "/") . "/", $str2)){ 
    echo "Match!"; 
} else { 
    echo "No match"; 
} 

EDIT: Это должно работать для вашего случая:

$str1 = "M<ter"; 
$str2 = "Moter"; 

//periods are a wildcards in regex 
if(preg_match("/" . str_replace("\<", ".*", preg_quote($str1, "/")) . "/", $str2)){ 
    echo "Match!"; 
} else { 
    echo "No match"; 
} 
+1

Это то, что я бы предпочел. +1 для размышлений о preg_quote. Хотя замените '*' на '. *', Чтобы соответствовать нескольким символам. – mario

+0

Спасибо за предложение '. *', Я не так хорош в regex. –

+0

Возможно, я не должен был использовать символ подстановки. Мой текст имеет символ «<» вместо знаков пунктуации и акцентов, и теперь мне нужно сравнить строки. например «M Shaun

1

Вы можете использовать similar_text() для сравнения двух строк и принять, если результат выше, например 80%.

similar_text($str1, $str2, $percent); 

Пример:

$str1 = 'AAA'; 
$str1 = '99999'; 

similar_text($str1, $str2, $percent); 
echo $percent; // e.g. 0.000 

$str1 = "h*llo"; 
$str2 = "hello"; 

similar_text($str1, $str2, $percent); 
echo $percent; // e.g. 95.000 

Подробнее здесь PHP SIMILAR TEXT

+0

Из любопытства, почему 80%? –

+1

Это просто для примера, я исправил его, спасибо – CIRCLE

+0

Мне нравится этот ответ, и он будет работать для большинства вещей, но это не так точно, как метод, который использует реальные подстановочные знаки, такие как fnmatch() или regex. –

Смежные вопросы