2011-03-26 4 views
0

이름이 다른 (부울 메서드)에 포함되어 있는지 확인하기 위해 일부 PHP 코드를 작성하려고합니다.문자열 비교 알고리즘

현재 str1이 str2에 있는지 확인하기 위해 strpos를 사용하고 있지만 조금 더 똑똑하기를 원합니다. 즉, 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를 사용하는 것이 중요하므로 정규 expiration 문자가있는 단어는 테스트를 망치지 않습니다.

예제 테스트가 포함되어 있습니다.

<?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

실제 사례 :-) –