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

Статус
В этой теме нельзя размещать новые ответы.

mr-graffity

Профессор
Регистрация
29 Июл 2010
Сообщения
189
Реакции
43
Нужно выделить в строке фрагмент текста, к примеру между вторым и пятым пробелом.
делаю так
$str = "домов из пеноблоков до 100 кв. м Пеноблок или же пенобетон, это современный частоиспользуемый строительный материал, как в виде к конструкционного составляющего (сооружение стен) в строительстве малоэтажных частных домов, так и в виде качественного и эффективного утеплителя.";
$result = preg_match_all('/\s(.*?)\s/', $str, $maches);
print_r($maches);
Делит строку на слова. А вот как указать что нужно взять текст к примеру между вторым и пятым пробелом???
Голову сломал..
 
Все решено
вот регулярка
/\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);
?>
 
Если я правильно понял задачу, то регулярка такая:
Код:
((?:\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);
?>
 
Спасибо, но работает не корректно....
если выделяем от 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 кв. м Пеноблок или же пенобетон, это современный частоиспользуемый строительный материал, как в виде к конструкционного составляющего (сооружение стен) в строительстве малоэтажных частных домов, так и в виде качественного и эффективного утеплителя.

Проблема в том что выражение спотыкается когда встречается "кв.", т.е. точка.
 
Проблема была в \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);
?>

Спасибо большоеДля просмотра ссылки Войди или Зарегистрируйся
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху