Алгоритм сравнения строк - PullRequest
0 голосов
/ 26 марта 2011

Я пытаюсь написать некоторый 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

Любые идеи, если есть встроенная функция или регулярное выражение iможно использовать для достижения выше?Спасибо.

Ответы [ 2 ]

4 голосов
/ 26 марта 2011

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]);
}
3 голосов
/ 26 марта 2011

С помощью регулярных выражений вы можете использовать \b для обозначения границы слова: \bGAP\b (Я почти не знаю PHP, но, думаю, вам придется вводить строковый литерал как "\\bGAP\\b").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...