2011-03-26 133 views
0

我想寫一些php代碼來檢查名稱是否包含在另一個(布爾方法)。字符串比較算法

我目前正在使用strpos來確定str1是否在str2中,但是我希望它有點聰明。即只檢查str1是否自己存在,而不是另一個不相關名稱/字符串的一部分。

compareStrings(str1,str2) 

例如

GAP & THISISNOTAGAP //should return false 
GAP & IN THE GAP //should return true 
GAP & GAP //shop return true 

ROSS & CROSSROADS //should return false 
ROSS & ROSS - CHICAGO //should return true 

任何想法,如果有一個內置函數或正則表達式,我可以使用以上實現?謝謝。

回答

3

用正則表達式,你可以使用\b來表示一個字邊界:\bGAP\b(我幾乎不知道PHP,但我猜你必須輸入的字符串字面作爲"\\bGAP\\b")。

4

Aasmund是完全正確的。我認爲我應該擴展如何使用PHP來完成。

使用:preg_match()preg_quote()

它使用preg_quote是非常重要的,這樣在他們的文字中有常規的特效字符不會搞亂測試。

包括您的示例測試。

<?php 
function wordInString($word, $string) { 
    return preg_match('/\b'.preg_quote($word, '/').'\b/', $string); 
} 

$tests = array(
    array('GAP', 'THISISNOTAGAP', false), 
    array('GAP', 'IN THE GAP', true), 
    array('GAP', 'GAP', true), 

    array('ROSS', 'CROSSROADS', false), 
    array('ROSS', 'ROSS - CHICAGO', true), 
); 

foreach($tests as $test) { 
    assert(wordInString($test[0], $test[1]) == $test[2]); 
} 
+0

+1對於實際例子:-) – 2011-03-26 03:06:52