26

Как проверить, содержит ли строка конкретное слово?

19

Описание проблемы

У меня есть следующий код на PHP:

$a = 'How are you?';

if ($a contains 'are')
    echo 'true';

Я пытаюсь проверить, содержит ли строка $a подстроку 'are'. Однако выражение if ($a contains 'are') не является корректным синтаксисом.

Как правильно написать это условие для проверки наличия подстроки в строке $a?

3 ответ(ов)

0

Если вы хотите избежать проблем с "ложными" и "истинными" значениями, вы можете использовать функцию substr_count:

if (substr_count($a, 'are') > 0) {
    echo "по крайней мере одно вхождение 'are' присутствует!";
}

Хотя substr_count немного медленнее, чем strpos, она позволяет избежать проблем с неявным сравнением.

0

Ваш код на PHP использует функцию preg_match(), чтобы проверить, содержится ли подстрока "are" в переменной $a. Если да, то выводится строка 'true'.

Если вам нужно перевести этот код на русский с пояснением, вот пример:

if (preg_match('/(are)/', $a)) {
   echo 'true'; // Если в переменной $a есть подстрока "are", выведется 'true'
}

Таким образом, данный фрагмент кода проверяет наличие слова "are" в строке, содержащейся в переменной $a. Если слово найдено, будет выведено 'true'.

0

Вы можете использовать функцию strstr для поиска подстроки в строке:

$haystack = "I know programming";
$needle   = "know";
$flag = strstr($haystack, $needle);

if ($flag) {
    echo "true";
}

Без использования встроенной функции:

Если вы хотите реализовать этот функционал без использования встроенных функций, вы можете воспользоваться следующим подходом:

$haystack  = "hello world";
$needle = "llo";

$i = $j = 0;

while (isset($needle[$i])) {
    while (isset($haystack[$j]) && ($needle[$i] != $haystack[$j])) {
        $j++;
        $i = 0;
    }
    if (!isset($haystack[$j])) {
        break;
    }
    $i++;
    $j++;
}

if (!isset($needle[$i])) {
    echo "YES";
} else {
    echo "NO";
}

В этом коде мы используем два цикла while для прохождения по строкам. Внешний цикл проверяет текущий символ подстроки $needle, а внутренний цикл ищет совпадение в строке $haystack. Если успели пройти по всей подстроке и не встретили конца строки $haystack, выводим "YES", иначе — "NO".

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь