Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: поиск хоть одного нахождения но с учетом что нет другого
Форумы портала PHP.SU » PHP » Регулярные выражения » поиск хоть одного нахождения но с учетом что нет другого

Страниц (1): [1]
 

1. Robot-007 - 27 Июля, 2016 - 17:50:09 - перейти к сообщению
Здравствуйте.

Скажите пожалуйста как сделать логическое "И"

Например есть массив со строками:

Друг
Мир
Привет
Привет всем
Привет Мир
Этот Привет Мир Друг
Друг Мир Привет

Надо найти все нахождения в строке, имеющее слово "Привет" но не имеющее слово "Друг". При этом не известно в какой последовательности будет находится Привет, Друг и другие слова.
2. Fart - 27 Июля, 2016 - 21:14:09 - перейти к сообщению
можно код поинтереснее написать, но раз ты только задаешься вопросам как сделать...
тебе пример, чтобы наглядно видел логику:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $arr = array(
  2. "Друг",
  3. "Мир",
  4. "Привет",
  5. "Привет всем",
  6. "Привет Мир",
  7. "Этот Привет Мир Друг",
  8. "Друг Мир Привет"
  9. );
  10.  
  11. for($i=0; $i<count($arr); $i++)
  12. {
  13.         preg_match_all("/привет|друг/ui", $arr[$i], $a);
  14.  
  15.         if(!empty($a[0][0]))
  16.         {
  17.                 if(mb_strtolower($a[0][0]) == 'привет' AND !isset($a[0][1]))
  18.                 {
  19.                         echo $arr[$i]."<br>";
  20.                 }
  21.         }
  22. }
3. Robot-007 - 28 Июля, 2016 - 00:50:58 - перейти к сообщению
Fart пишет:
можно код поинтереснее написать, но раз ты только задаешься вопросам как сделать...
тебе пример, чтобы наглядно видел логику:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $arr = array(
  2. "Друг",
  3. "Мир",
  4. "Привет",
  5. "Привет всем",
  6. "Привет Мир",
  7. "Этот Привет Мир Друг",
  8. "Друг Мир Привет"
  9. );
  10.  
  11. for($i=0; $i<count($arr); $i++)
  12. {
  13.         preg_match_all("/привет|друг/ui", $arr[$i], $a);
  14.  
  15.         if(!empty($a[0][0]))
  16.         {
  17.                 if(mb_strtolower($a[0][0]) == 'привет' AND !isset($a[0][1]))
  18.                 {
  19.                         echo $arr[$i]."<br>";
  20.                 }
  21.         }
  22. }


Прикольно, спасибо. Пригодилось. Но все же интересно, неужели в регулярном выражении нет логического И. Было бы очень удобно одним запросом двух зайцев поймать. Я понимаю такого нет, но например если бы было /привет&&(^друг)/
4. Fart - 28 Июля, 2016 - 15:47:00 - перейти к сообщению
немного не пойму твоих замыслов. мой пример также фильтрует строчку по твоим запросам
есть привет, но нет друг.
$arr = array(
"Друг",
"Мир",
"Привет",
"Привет всем",
"Привет Мир",
"Этот Привет Мир Друг",
"Друг Мир Привет",
"/привет&&(^друг)/"
);
если тебе нужна другая логика и условие - меняй согласно своим запросам.

отвечаю на твой вопрос, про логическое "И" так как ты не понимаешь смысл функций и их принцип работы:

логическое "И" заменяется (выполняется функцией) preg_match_all
также будет влиять твой запрос в регулярке

 

Powered by ExBB FM 1.0 RC1