Вопрос по php, string – Как я могу проверить, содержится ли слово в другой строке, используя PHP?

59

Псевдокод

text = "I go to school";
word = "to"
if ( word.exist(text) ) {
    return true ;
else {
    return false ;
}

Я ищу функцию PHP, которая возвращает истину, если слово существует в тексте.

возможный дубликатHow to check if a string contains specific words? mawburn
Вы можете найтиs($text)->contains($word) или жеs($text)->containsIgnoreCase($word) полезно, как найдено вthis standalone library. caw

Ваш Ответ

10   ответов
5

StrPos

$text = "I go to school";
$word = "to"
$pos = strpos($text, $word);

if ($pos === false) {
    return false;
} else {
    return true;
}
?>
0

strpos функция в php.

$text = "I go to school";
$word = "to"
if (strpos($text,$word)) {
    echo 'true';
}
1

strstr & # X2014; Найти первое вхождение строки

stristr & # X2014; Без учета регистра strstr ()

strrchr & # X2014; Найти последнее вхождение символа в строку

StrPos & # X2014; Найти позицию первого вхождения подстроки в строке

strpbrk & # X2014; Поиск строки для любого набора символов

Если это не помогает, вам следует использоватьpreg регулярное выражение

preg_match & # X2014; Выполнить совпадение регулярного выражения

0

я решил написать свою собственную функцию содержимого (с более чем одним параметром) и хорошо запомнить.

function contains($str,$contain)
{
    if(stripos($contain,"|") !== false)
        {
        $s = preg_split('/[|]+/i',$contain);
        $len = sizeof($s);
        for($i=0;$i < $len;$i++)
            {
            if(stripos($str,$s[$i]) !== false)
                {
                return(true);
                }
            }
        }
    if(stripos($str,$contain) !== false)
        {
        return(true);
        }
  return(false);
}

Описание php содержит:

contains($str,$arg)

$str: The string to be searched
$arg: The needle, more arguments divided by '|'

Примеры:

$str = 'green house';
if(contains($str,"green"))
    echo "we have a green house.";
else
    echo "our house isn't green";

$str = 'green, blue, red houses'; 
if(contains($str,"green|red"))
    echo "we have a green or red house.";
else
    echo "we have a blue house.";
@Julius Я не писал код, я только что отредактировал пост, извините, я не могу вам помочь (я на самом деле не знаю php)
@ Райан Хейнинг, Как мне убедиться, что это соответствует словам, а не буквам? Поскольку приведенный выше код вернул true, даже если я ищу письмоe т.е.if(contains($str,"e"))
12

return (strpos($text,$word) !== false); //case-sensitive

или же

return (stripos($text,$word) !== false); //case-insensitive
Вы получили их задом наперед. Stripos не зависит от регистра.
Хаха, совершенно верно и, очевидно, так. фиксированный
@Itay, спасибо, что изменили
13
function hasWord($word, $txt) {
    $patt = "/(?:^|[^a-zA-Z])" . preg_quote($word, '/') . "(?:$|[^a-zA-Z])/i";
    return preg_match($patt, $txt);
}

"Listen to Me" "To the moon" "up-to-the-minute"

но нет:

"Together" "Into space"
идеальное решение, хотя, конечно, принятый ответ правильный в соответствии с заданным вопросом
2

ункцию 'strstr'):

if (strstr($haystack, $needle)) {
   return true;
} else {
   return false;
}
0
@mrclay

"/(?:^|\w+)" . preg_quote($word, '/') . "(?:$|\w+)/i"

так что он либо проверяет начало или пробел, и окончание или пробел.

102

я этого простого примераstrpos() вероятно, самая простая и самая прямая функция для использования. Если вам нужно что-то сделать с результатом, вы можете предпочестьstrstr() или жеpreg_match(), Если вам нужно использовать сложный узор вместо нити в качестве иглы, вам понадобитсяpreg_match().

$needle = "to";
$haystack = "I go to school";

strpos () и stripos () Метод (stripos () не чувствителен к регистру):

if (strpos($haystack, $needle) !== false) echo "Found!";

Метод strstr () и stristr () (stristr нечувствителен к регистру):

if (strstr($haystack, $needle)) echo "Found!";

метод preg_match (регулярные выражения, гораздо более гибкие, но работают медленнее):

if (preg_match("/to/", $haystack)) echo "Found!";

Поскольку вы запросили полную функцию, вот как вы ее соединили (со значениями по умолчанию для иглы и стога сена):

function match_my_string($needle = 'to', $haystack = 'I go to school') {
  if (strpos($haystack, $needle) !== false) return true;
  else return false;
}
не могли бы вы просто сделатьreturn (strpos($haystack, $needle) !== false);? У него точно такой же результат, только более чистый код
Не php'ы (как и я) отмечают двойное равенство в!== false потому что strpos () может вернуть 0, если совпадение найдено в самом начале строки (позиция символа ноль).
3

Похожие вопросы