PHP Проверьте, содержит ли строка хотя бы два конкретных слова - PullRequest
0 голосов
/ 12 декабря 2018

Я использую preg_match, чтобы проверить, есть ли в строке определенное слово:

$string = 'This string contains a few words that are in an array!';
$arr = ['string', 'few', 'words'];

if(preg_match('['.implode('|', $arr).']', $string)){
    //do something if there is at least one word from the array inside that string
}

Это работает довольно хорошо, но вернет true, если есть хотя бы одно слово, и янужно, чтобы он возвращал true, если внутри этой строки есть хотя бы два слова из массива.

Можно ли это сделать за один шаг?Если нет, то каким путем я должен идти отсюда, чтобы получить этот результат?

Спасибо!: D

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Выбранный ответ подходит, если вам все равно точное совпадение.Если вы хотите сопоставить слово EXACT, вам нужно использовать границу слова \b.

Вот пример:

$arr = ['string', 'few', 'words'];

preg_match_all('#\b('.implode('|', $arr).')\b#', $string, $wordsFound);

$wordsFound = array_unique($wordsFound[0]);

if(count($wordsFound) >= 2){
    echo "Matched";
}else{
    echo "Not matched";
}


Input: $string = 'This string contains a few words that are in an array!';
Output: Matched (3 founds)

Input: $string = 'This string222 contains a few words that are in an array!';
Output: Matched (2 founds)

Input: $string = 'This string222 contains a few23 words that are in an array!';
Output: Not Matched (1 found)

Input: $string = 'This string contains a string words that are in an array!';
Output: Matched (2 founds)

Input: $string = 'This string contains a string string that are in an array!';
Output: Not Matched (1 found)
0 голосов
/ 12 декабря 2018

Если вам необходимо знать, что не менее 2 из требуемых слов существует в строке, вам следует быть осторожным.Если у вас есть 2 одинаковых слова в строке, легко получить ложный положительный результат, если вы просто используете preg_match_all для поиска происшествий.

Это сообщит 3, то есть все 3 слова присутствуют в стоге сена

$string = 'This string contains a string and a few other words!';
$finds = ['string', 'few', 'words'];
$findCount = 0;

foreach ($finds as $find) {
    if ( strpos($string, $find) !== false ) $findCount++;
}
echo $findCount;

Он сообщит 2, если вы используете эту строку

$string = 'This string contains a string and a other words!';

И, самое главное, сообщите только ONE , если вы используете эту строку, которая содержит слово string дважды, но не 2 из обязательных слов.

$string = 'This string contains a string and other stuff!';
0 голосов
/ 12 декабря 2018

Вы можете использовать preg_match_all для этого

$string = 'This string contains a few words that are in an array!';
$arr = ['string', 'few', 'words'];
$count = preg_match_all('['.implode('|', $arr).']', $string); // Returns 3
...