Нужно выделить в тег фразу.

Тема в разделе "Регулярные выражения", создана пользователем mr-graffity, 23 мар 2013.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. mr-graffity

    mr-graffity

    Регистр.:
    29 июл 2010
    Сообщения:
    163
    Симпатии:
    38
    Нужно выделить в строке фрагмент текста, к примеру между вторым и пятым пробелом.
    делаю так
    $str = "домов из пеноблоков до 100 кв. м Пеноблок или же пенобетон, это современный частоиспользуемый строительный материал, как в виде к конструкционного составляющего (сооружение стен) в строительстве малоэтажных частных домов, так и в виде качественного и эффективного утеплителя.";
    $result = preg_match_all('/\s(.*?)\s/', $str, $maches);
    print_r($maches);
    Делит строку на слова. А вот как указать что нужно взять текст к примеру между вторым и пятым пробелом???
    Голову сломал..
     
  2. mr-graffity

    mr-graffity

    Регистр.:
    29 июл 2010
    Сообщения:
    163
    Симпатии:
    38
    Все решено
    вот регулярка
    /\s{1}(.*?\s){3}/
    <-------------- добавлено -------------->
    Касяк выражение не работает...
    Делает выборку с первого до любого пробела. Если указать, с пятого по девятый не работает. С первого по девятый работает.
    Нужна помощь!
    <-------------- добавлено -------------->
    во как получилось в два вырожения
    <?php
    // входная строка
    $str = 'пассажирский 342 самолет, авиакомпания, закат, красное небо, перистые облака, след от двигателей, взлет, удачного полета';
    preg_match("|(.*?\s){3}(.*)|i",$str,$m);
    print_r($m);
    echo "<br>";
    preg_match("/(.*?\s){2}/",$m[2],$m);

    print_r($m);
    ?>
     
  3. xpert13

    xpert13 <(*_*)>

    Moderator
    Регистр.:
    7 ноя 2008
    Сообщения:
    182
    Симпатии:
    455
    Если я правильно понял задачу, то регулярка такая:
    Код:
    ((?:\w+\s+){2})((?:\w+\s+){2}\w+)
    На php будет примерно так:
    PHP:
    <?php
        
    // Между 2 и 5 пробелом
        
    $start 2;
        
    $finish 5;
     
        
    $str 'домов из пеноблоков до 100 кв. м Пеноблок или же пенобетон, это современный частоиспользуемый строительный материал, как в виде к конструкционного составляющего (сооружение стен) в строительстве малоэтажных частных домов, так и в виде качественного и эффективного утеплителя.';
        
    $reg_ex '/((?:\w+\s+){'$start .'})((?:\w+\s+){'. ($finish $start 1) .'}\w+)(.*)/ui';
     
        echo 
    preg_replace($reg_ex'$1<b>$2</b>$3'$str);
    ?>
     
    mr-graffity нравится это.
  4. mr-graffity

    mr-graffity

    Регистр.:
    29 июл 2010
    Сообщения:
    163
    Симпатии:
    38
    Спасибо, но работает не корректно....
    если выделяем от 2 до 7 то текст вырезается с конца
    PHP:
    <?php
     
    // Между 2 и 7 пробелом
     
    $start 2;
     
    $finish 7;
     
    $str 'домов из пеноблоков до 100 кв. м Пеноблок или же пенобетон, это современный частоиспользуемый строительный материал, как в виде к конструкционного составляющего (сооружение стен) в строительстве малоэтажных частных домов, так и в виде качественного и эффективного утеплителя.';
     
    $reg_ex '/((?:\w+\s+){'$start .'})((?:\w+\s+){'. ($finish $start 1) .'}\w+)(.*)/ui';
     
    echo 
    preg_replace($reg_ex'$1<b>$2</b>$3'$str);
     
    ?>
    домов из пеноблоков до 100 кв. м Пеноблок или же пенобетон, это современный частоиспользуемый строительный материал, как в виде к конструкционного составляющего (сооружение стен) в строительстве малоэтажных частных домов, так и в виде качественного и эффективного утеплителя.
    <-------------- добавлено через 49 сек. -------------->
    А вот если выделяем от 2 до 6 то получаем
    домов из пеноблоков до 100 кв. м Пеноблок или же пенобетон, это современный частоиспользуемый строительный материал, как в виде к конструкционного составляющего (сооружение стен) в строительстве малоэтажных частных домов, так и в виде качественного и эффективного утеплителя.

    Проблема в том что выражение спотыкается когда встречается "кв.", т.е. точка.
     
  5. mr-graffity

    mr-graffity

    Регистр.:
    29 июл 2010
    Сообщения:
    163
    Симпатии:
    38
    Проблема была в \w нужно заменить на \S
    Все работает. и работает так.

    PHP:
    <?php
    // Между 2 и 7 пробелом
    $start 3;
    $finish 7;
     
    $str 'домов из пеноблоков до 100 кв. м Пеноблок или же пенобетон, это современный частоиспользуемый строительный материал, как в виде к конструкционного составляющего (сооружение стен) в строительстве малоэтажных частных домов, так и в виде качественного и эффективного утеплителя.';
    $reg_ex '/((?:\S+\s+){'$start .'})((?:\S+\s+){'. ($finish $start 1) .'}\w+)(.*)/ui';
     
    echo 
    preg_replace($reg_ex'$1<b>$2</b>$3'$str);
    ?>
    Спасибо большое xpert13 !
     
    xpert13 нравится это.
Статус темы:
Закрыта.