Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как взять часть текста с целыми словами?
 
 автор: Владимир55   (12.03.2007 в 10:29)   письмо автору
 
 

Есть текст, находящийся в переменной $text. Длина этого текста неизвестна - может быть, только одна буква, а может несколько сотен. И из этого текста нужно взять первые сто знаков, включая пробелы. Вроде бы, это не сложно, но ведь может случиться так, что конец этой выборки разрубит последнее слово на части, а это уже нехорошо... Но и автоматически отбрасывать последнее слово из опасения того, что оно является неполным, тоже неверно - а вдруг оно уместилось?

Вот я и думаю - как выбрать из переменной $text целые слова, находящиеся в пределах 100 знаков?

   
 
 автор: KPETuH   (12.03.2007 в 10:37)   письмо автору
 
   для: Владимир55   (12.03.2007 в 10:29)
 

експлодом разделите этот текст на слова и отбирайте первые несколько входящие по сумме символов в ваш интервал, это так навскидку...

   
 
 автор: ZuArt   (12.03.2007 в 10:48)   письмо автору
 
   для: KPETuH   (12.03.2007 в 10:37)
 

эксплодом не выйдет - разделителями слов вполне могут быть не ток пробелы, но и точки-тире-запятые и много чего другого...

   
 
 автор: KPETuH   (12.03.2007 в 11:07)   письмо автору
 
   для: ZuArt   (12.03.2007 в 10:48)
 

с одной стороны согласен не очень хорошо с другой стороны в грамотно набитом тексте после знаков припенания всегда стоят пробелы :)

   
 
 автор: ZuArt   (12.03.2007 в 11:12)   письмо автору
 
   для: KPETuH   (12.03.2007 в 11:07)
 

угу... ток опять-же если после последнего слова стоит знак препинания, который делает это слово неуместимым, то оно обрежется, а могло аккурат в тему... =)

   
 
 автор: Trianon   (12.03.2007 в 10:44)   письмо автору
 
   для: Владимир55   (12.03.2007 в 10:29)
 

http://softtime.ru/forum/read.php?id_forum=6&id_theme=25666

   
 
 автор: Владимир55   (12.03.2007 в 13:13)   письмо автору
 
   для: Trianon   (12.03.2007 в 10:44)
 

Ссылочка прямо для меня! Спасибо!

Но остались два маленьких нюанса.
1. В начале текста могут быть пробелы, и желательно их исключить. Если я поставлю такую функцию,

$q = ltrim ($q1);

это нормально?

2. Добавление слов "Подробнее", ради которого изначально и писался код в ссылке, мне не нужно. Как мне от него освободиться? Просто убрать слово ".. подробнее", слив вместе кавычки? Или есть более корректное решение?

============
Оригинал текста в ссылке (чтобы вам лишний раз не кликать):

$q = 'Ребята подскажите какими строковыми функциями и как можно сделать так,
чтобы мини новости (новостная лента) на сайте вырезались не побуквенно,
а пословно. Ну я имею в виду как сделать так чтобы Когда я в своем скрипте
добавляю новости, в новостную ленту добавллось автоматически Первые слова,
а потом там как у всех "подробнее..."
Никак не могу ничего придумать';
;
$num = 100;
$r = preg_match("/^([\s\S]{1,$num})(?=([\s]|$))/", $q, $r) && $r[2] ? ($r[1] .'... подробнее') : $q;
echo nl2br($r);

   
 
 автор: Trianon   (12.03.2007 в 13:26)   письмо автору
 
   для: Владимир55   (12.03.2007 в 13:13)
 


 ($r[1] .'... подробнее') 
 ($r[1] .'') 
 ($r[1]) 
  $r[1]


$r = preg_match("/^([\s\S]{1,$num})(?=([\s]|$))/", $q, $r) && $r[2] ? $r[1] : $q;

   
 
 автор: dim0s   (13.03.2007 в 18:49)   письмо автору
 
   для: Trianon   (12.03.2007 в 13:26)
 

Вот еще могу предложить, правда без рег. выражений.

<?php
// обрезает до заданной длинны, до первого пробела
//$limit --- до какой длинны обрезаем
//$input_str --- строка на входе
$input_str "Оформилась приблизительно в 2000 году, по другой версии — в 1997. Позиционируется как контркультурна";
function 
strok_limit($input_str,$limit)
{
//$limit до какой длинны обрезаем
$str_lenght strlen($input_str);
if (
$str_lenght $limit)
{
  
$str substr($input_str,0,$limit);
  
$pos strrpos($str" ");
   if (!isset(
$pos))
    {
$str "....";}
   else
    {
$str substr($str,0,$pos); $str $str."....";}
}
return 
$str;
}
echo 
strok_limit($input_str,14)."<br>\n";
print (
strok_limit($input_str,45));
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования