2015-12-02 4 views
1

я следующее:Проверьте, если несколько слов существуют в предложении

Приговор:

"This is a red apple" 

шаблона для проверки:

red & apple. 

Оба приговора и шаблон для проверки пользователь генерируются.

$sentence = "This is a red apple"; 
$words = array('red','apple'); 
$ch = implode("|",$words); 
$pattern = '/[$ch]/'; 

if(preg_match($pattern, $sentence)) 
{ 
    // Do something if the sentence contains red & apple 
} 

Когда я выполняю этот код, я ничего не получаю (ничего не отображается). Когда я делаю эхо на $ pattern, он возвращает его как целую строку.

Как я могу это исправить? Что мне не хватает?

+0

Попробуйте '$ pattern = '/ ['. $ ch. '] /'; ' – Tushar

+0

@Tushar это всегда возвращает true так или иначе – Jeremy

+1

' $ pattern = "/ [$ ch] /"; 'Проверять кавычки, для которых вам нужны двойные кавычки, для работы. [Проверить это] (https://3v4l.org/qd046) –

ответ

2

изменение $pattern = '/[$ch]/';

к

$pattern = '/('.$ch.')/'; или $pattern = '/['.$ch.']';

<?php 
$sentence = "This is a red apple"; 
$words = array('apple','red'); 
$ch = implode("|",$words); 
echo $pattern = '/('.$ch.')/'; 

if(preg_match($pattern, $sentence)) 
{ 
    echo ' Do something if the sentence contains red & apple'; 
}else 
{ 
    echo 'nothing happpen'; 
} 
?> 

проверка, если оба слова матч

<?php 
$sentence = "This is a red apple"; 
$words = array('red','apple'); 
$ch = implode("|",$words); 
echo $pattern = '['.$ch.']'; 

if(preg_match_all($pattern, $sentence,$matches) == 2) 
{ 
    echo ' Do something if the sentence contains red & apple'; 
}else 
{ 
    echo 'nothing happpen'; 
} 

?>

Вы также проверить, сколько слов сопоставляются по

echo count($matches[0]); 

$matches является массив содержит слово совпадают

1

Вы должны заботиться о quotes при использовании переменных в кавычки, необходимо обновить

$pattern = '/[$ch]/'; 

в

$pattern = "/($ch)/"; 
      ^^ ^^ ^^ ^^ 

Вам необходимо обновить шаблон регулярных выражений также, так что ваш код выглядит так

$sentence = "This is a red apple"; 
$words = array('red','apple'); 
$ch = implode("|",$words); 
$pattern = "/($ch)/"; 
if(preg_match_all($pattern, $sentence,$m)) 
{ 
    echo "yes \n"; 
    print_r($m); 
} 

Вместо regex я буду использовать array_intersect наряду с str_word_count вроде как

$sentence = "This is a red apple"; 
$words = array('red','apple','blue'); 
$var = count(array_intersect(str_word_count($sentence,1),$words)); 
if(count($words == $var)){ 
    echo "Yes got it"; 
} 

Demo

Demo2

+0

Спасибо за указание ошибки.У меня есть один окончательный вопрос: что, если я хочу, чтобы оба слова в $ pattern существовали в $ предложение, были истинными. Как мне изменить свой шаблон? – Jeremy

+0

проверить мои ans @JeremyRIrawan –

+0

Downvoters публикуют причину для downvoting –