2013-10-15 16 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

是的,用正則表達式,更具體地說是PHP的preg_match。你在找什麼是「通配符」。

這是未經測試,但應該爲你工作:

$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"; 
} 

編輯:這應該適用於你的情況:

$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

這就是我更喜歡的。考慮preg_quote的+1。儘管用'。*'替換'*'以匹配多個字符。 – mario

+0

感謝您提供'。*'建議,我在正則表達式方面並不是那麼棒。 –

+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()或正則表達式的方法那樣準確。 –