|
|
|
| Здравствуйте!
Такой вопрос, как найти несколько слов в тексте за 1 цикл. Например, есть слова ($x, $r, $d) если любое из слов найдено то возвращаем true. Есть подозрение, что быстрее всего через регулярку сделать. | |
|
|
|
|
|
|
|
для: -Aleks-
(07.10.2010 в 12:07)
| | Строковые функции вам в помощь, если вы знаете любое из этих слов, и это будет быстрее, нежели ваши "подозрения". | |
|
|
|
|
|
|
|
для: sim5
(07.10.2010 в 13:46)
| | Как вы представляете использование строковых функций, если требуется найти в тексте любое из нескольких слов за один цикл. | |
|
|
|
|
|
|
|
для: -Aleks-
(07.10.2010 в 15:06)
| | И в чем проблема? Если в тексте "a b c d e f ..." требуется найти любое из b, e, f, то почему с этим не справятся строковые функции? | |
|
|
|
|
|
|
|
для: sim5
(07.10.2010 в 15:10)
| | Я так и не смог найти подходящую функцию или правильно использовать ее. Понять не могу как перечислять слова, если через пробел то искаться будет вся строка из нескольких слов. | |
|
|
|
|
|
|
|
для: -Aleks-
(07.10.2010 в 15:16)
| | Вы видемо вопрос тогда неверно задаете - вам не любое из этих слов надо, а любое сочетание из обязательно трех слов этих? | |
|
|
|
|
|
|
|
для: sim5
(07.10.2010 в 15:27)
| | Не только из трех это может быть и одно слово и 10. Если встречаться какое-либо слово из списка то возвращаться true.
На пример можно так сделать разбить список слов в массив и искать каждое слово с помощью волшебных строковых функций. Но это слишком долго! | |
|
|
|
|
|
|
|
для: -Aleks-
(07.10.2010 в 15:55)
| |
<?
$str = "aaaa aa bbbb bb ccccc cc dddddd dd";
$search = array('aa', 'cc');
$str = str_word_count($str, 1);
echo array_intersect($str, $search) ? "Y" : "N";
|
>разбить список слов в массив и искать каждое слово с помощью волшебных строковых функций. Но это слишком долго!
Вы думаете парсить с помощью рег. выражений это быстрее? Этот механизм затратный. | |
|
|
|
|
|
|
|
для: sim5
(07.10.2010 в 16:06)
| | Спс большое здоровско работает. Просто я на одном форуме видел сравнительный тест строковые функции против регулярки. Регулярные выражения заметно быстрее. | |
|
|
|
|
|
|
|
для: -Aleks-
(07.10.2010 в 16:30)
| | Вы почитайте как происходит разбор рег. выражениями. Механизм этот в любом случае затратный, хотя и любая функция требует затрат и времени. Но все таки, рег. выражения служат для сложных, неординарных поисков, а не для простого, что решается проще и быстрее стандартными функциями. В литературе по рег. выражениям тоже есть рекомендации, когда не стоит их использовать. Охота сравнить, сравнивайте.
Буквально недавно на форуме появилось заявление о том, что он использует рег. выражения потому, что меньше строк в коде. Принцип просто уникальный, но всегда ли оправданный? Код выше можно записать тоже одной строкой:
<?
echo array_intersect(str_word_count($str, 1), array('aa', 'cc')) ? "Y" : "N";
| если так важна экономия строк в коде.
Буквально ниже тема в этом разделе, где строка явно представляет собой сериализованный массив, но вот ее тоже хотят парсить рег. выражениями в поисках искомого. И это что тоже лучший способ? | |
|
|
|
|
|
|
|
для: sim5
(07.10.2010 в 16:42)
| | Проблема с этой функцией в utf-8 не ищет! Вот текст к примеру:
$str = "предприятие расположено в Москве,";
echo array_intersect(str_word_count($str, 1), array('расположено')) ? "Y" : "N"; | |
|
|
|
|
|
|
|
для: -Aleks-
(09.10.2010 в 12:57)
| | Можно и мультибайтную строку разбить в массив, а можете конвертировать строку в ASCII, если речь о просто словах идет, а далее работать с ковертированным. | |
|
|
|