Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как вырезать первые несколько слов из строки?


Автор: barcelona 4.4.2008, 15:02
Здравствуйте.
Тема вынесена в заглавие. Как? При этом нужно вырезать именно слова, а не символы.

Автор: mishaSL 4.4.2008, 15:19
barcelona, вот что первое приходит на ум:
Код

<?php

$text = 'слова слова слова мои слова'; // текст
$countWords = 3; //кол-во слов для вырезания
$reg = '#^\b[\w]+\b\s*#i';
for($i=0;$i<$countWords;$i++) {
    $text = preg_replace($reg, '', $text);
}
print $text;

?>

Автор: barcelona 4.4.2008, 15:33
mishaSL, регулярное выражение какое-то странное. Не работает.

Автор: mishaSL 4.4.2008, 16:30
Цитата(barcelona @  4.4.2008,  15:33 Найти цитируемый пост)
mishaSL, регулярное выражение какое-то странное. Не работает. 

работает оно нормально, просто у вас наверное локаль не установлена:
Код

setlocale(LC_ALL, "ru_RU.CP1251", "RUS");
$text = 'слова слова слова мои слова'; // текст
$countWords = 3; //кол-во слов для вырезания
$reg = '#^\b[\w]+\b\s*#i';
for($i=0;$i<$countWords;$i++) {
    $text = preg_replace($reg, '', $text);
}
print $text;

Автор: ksnk 4.4.2008, 19:01
Осталось только уточнить, что-же такое "вырезать". Отрезать напрочь, напрочь отрезать, как понял это 
mishaSL, или что-то другое...

Автор: barcelona 7.4.2008, 08:39
У меня упрямо выводится "мои слова".

Автор: mishaSL 7.4.2008, 10:22
Цитата(barcelona @  7.4.2008,  08:39 Найти цитируемый пост)
У меня упрямо выводится "мои слова". 

Дак так и должно выводиться. Там же комментарии стоят: "кол-во слов для вырезания". Т.е. вырезаем три слова с начала текста.

Автор: sTa1kEr 9.4.2008, 13:55
Цитата(mishaSL @  4.4.2008,  16:19 Найти цитируемый пост)
$reg = '#^\b[\w]+\b\s*#i';

Зачем \w брать в квадратных скобках? \w сам по себе является набором символов.
Модификатор 'i' так же не нужен, т.к. \w включает в себя символы  обоих регистров.
Зачем нужен цикл? Почему бы одной регуляркой не сделать?
Код

$reg = '/^(\b\w+\b\s*){0,'.$countWords.'}/';

Автор: flashaa 9.4.2008, 13:59
Ещё вариант - задействовать наконец параметр limit у preg_replace
Цитата

mixed preg_replace  ( mixed $pattern  , mixed $replacement  , mixed $subject  [, int $limit  ] )

Правлю код mishaSL:
Код

setlocale(LC_ALL, "ru_RU.CP1251", "RUS");
$text = 'слова слова слова мои слова'; // текст
$countWords = 3; //кол-во слов для вырезания
$reg = '#^\b[\w]+\b\s*#i';
$text = preg_replace($reg, '', $text, $countWords);
print $text;

Полученные слова можно дальше обработать, если они интересуют по отдельности.

Автор: mishaSL 9.4.2008, 14:56
sTa1kEr, абсолютно согласен со всеми замечаниями. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)