Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Найти несколько слов в тексте за 1 цикл.
 
 автор: -Aleks-   (07.10.2010 в 12:07)   письмо автору
 
 

Здравствуйте!
Такой вопрос, как найти несколько слов в тексте за 1 цикл. Например, есть слова ($x, $r, $d) если любое из слов найдено то возвращаем true. Есть подозрение, что быстрее всего через регулярку сделать.

  Ответить  
 
 автор: sim5   (07.10.2010 в 13:46)   письмо автору
 
   для: -Aleks-   (07.10.2010 в 12:07)
 

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

  Ответить  
 
 автор: -Aleks-   (07.10.2010 в 15:06)   письмо автору
 
   для: sim5   (07.10.2010 в 13:46)
 

Как вы представляете использование строковых функций, если требуется найти в тексте любое из нескольких слов за один цикл.

  Ответить  
 
 автор: sim5   (07.10.2010 в 15:10)   письмо автору
 
   для: -Aleks-   (07.10.2010 в 15:06)
 

И в чем проблема? Если в тексте "a b c d e f ..." требуется найти любое из b, e, f, то почему с этим не справятся строковые функции?

  Ответить  
 
 автор: -Aleks-   (07.10.2010 в 15:16)   письмо автору
 
   для: sim5   (07.10.2010 в 15:10)
 

Я так и не смог найти подходящую функцию или правильно использовать ее. Понять не могу как перечислять слова, если через пробел то искаться будет вся строка из нескольких слов.

  Ответить  
 
 автор: sim5   (07.10.2010 в 15:27)   письмо автору
 
   для: -Aleks-   (07.10.2010 в 15:16)
 

Вы видемо вопрос тогда неверно задаете - вам не любое из этих слов надо, а любое сочетание из обязательно трех слов этих?

  Ответить  
 
 автор: -Aleks-   (07.10.2010 в 15:55)   письмо автору
 
   для: sim5   (07.10.2010 в 15:27)
 

Не только из трех это может быть и одно слово и 10. Если встречаться какое-либо слово из списка то возвращаться true.

На пример можно так сделать разбить список слов в массив и искать каждое слово с помощью волшебных строковых функций. Но это слишком долго!

  Ответить  
 
 автор: sim5   (07.10.2010 в 16:06)   письмо автору
 
   для: -Aleks-   (07.10.2010 в 15:55)
 

<?
$str 
"aaaa aa bbbb bb ccccc cc dddddd dd";
$search = array('aa''cc');
$str str_word_count($str1);
echo 
array_intersect($str$search) ? "Y" "N";


>разбить список слов в массив и искать каждое слово с помощью волшебных строковых функций. Но это слишком долго!

Вы думаете парсить с помощью рег. выражений это быстрее? Этот механизм затратный.

  Ответить  
 
 автор: -Aleks-   (07.10.2010 в 16:30)   письмо автору
 
   для: sim5   (07.10.2010 в 16:06)
 

Спс большое здоровско работает. Просто я на одном форуме видел сравнительный тест строковые функции против регулярки. Регулярные выражения заметно быстрее.

  Ответить  
 
 автор: sim5   (07.10.2010 в 16:42)   письмо автору
 
   для: -Aleks-   (07.10.2010 в 16:30)
 

Вы почитайте как происходит разбор рег. выражениями. Механизм этот в любом случае затратный, хотя и любая функция требует затрат и времени. Но все таки, рег. выражения служат для сложных, неординарных поисков, а не для простого, что решается проще и быстрее стандартными функциями. В литературе по рег. выражениям тоже есть рекомендации, когда не стоит их использовать. Охота сравнить, сравнивайте.
Буквально недавно на форуме появилось заявление о том, что он использует рег. выражения потому, что меньше строк в коде. Принцип просто уникальный, но всегда ли оправданный? Код выше можно записать тоже одной строкой:
<?
echo array_intersect(str_word_count($str1), array('aa''cc')) ? "Y" "N";
если так важна экономия строк в коде.
Буквально ниже тема в этом разделе, где строка явно представляет собой сериализованный массив, но вот ее тоже хотят парсить рег. выражениями в поисках искомого. И это что тоже лучший способ?

  Ответить  
 
 автор: -Aleks-   (09.10.2010 в 12:57)   письмо автору
 
   для: sim5   (07.10.2010 в 16:42)
 

Проблема с этой функцией в utf-8 не ищет! Вот текст к примеру:

$str = "предприятие расположено в Москве,";

echo array_intersect(str_word_count($str, 1), array('расположено')) ? "Y" : "N";

  Ответить  
 
 автор: sim5   (09.10.2010 в 13:37)   письмо автору
 
   для: -Aleks-   (09.10.2010 в 12:57)
 

Можно и мультибайтную строку разбить в массив, а можете конвертировать строку в ASCII, если речь о просто словах идет, а далее работать с ковертированным.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования