Поиск 4 слов

Тема в разделе "PHP", создана пользователем LEXAlForpostl, 9 янв 2011.

Статус темы:
Закрыта.
Модераторы: latteo
  1. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Здравствуйте.
    Подскажите, пожалуйста, как найти связку из 4 слов, между которыми только пробел и все слова от 4х букв и более.
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.404
    Симпатии:
    1.185
    PHP:
    <?
    $file "bla-bla.txt"
     
    $string =  file_get_contents($file);

    preg_match_all("/\w{4,}\s\w{4,}\s\w{4,}\s\w{4,}/i",
                    
    $string$result);
    print_r ($result);
    ?>
    Основа здесь регулярные выражения:
    \w - Любой символ, образующий "слово"
    {4,} - в слове должно быть от 4 символов и более
    \s - любой пробельный символ. Если нужен не любой пробельный, а именно пробел замени все вхождения\s на символ пробела
     
  3. bugargen

    bugargen

    Регистр.:
    24 апр 2008
    Сообщения:
    232
    Симпатии:
    19
    Предлагаю такой код:
    PHP:
    preg_match '#((^|\s)\w{4,}){4}#'$str$out );
    Нужная строка будет в $out[0].

    ИМХО, это код более универсален. Т.к. при необходимости найти не 4 слова подряд, а 40 или 400 - первый предложенный вариант разрастётся до безобразия, а здесь - только последнюю цифру сменить. Тоже и с количеством символов в слове.
     
  4. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.404
    Симпатии:
    1.185
    bugargen Спасибо за конструктивную критику.
    Долго я и не думал просто в лоб решил :)

    Тестил твой код на файле в cp1251, окончание строки \r\n
    По твоей регулярке в элементах массива $out[0] будут результаты с предшествующей \r-кой. Необходимо дополнительно trim делать.
    Плюс результирующий массив больше по объему - дополнительная оперативка.
     
  5. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    вариант bugargen не совсем подходит под условие ТС-а
    и не в trim дело.
    если искомая строкабудет отделятся от начала строки символами не из алфавита, и не пробелмаи, то она не будет найдена
    вот чуть больший но более верный вариант:

    PHP:
    preg_match '#(\w{4,}\s){3}\w{4,}#'$str$out );
     
Статус темы:
Закрыта.