Вырезание подстроки

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

pslava

Постоялец
Регистрация
16 Май 2007
Сообщения
618
Реакции
134
Как можно реализовать вырезание из строки первых 200 символов с целым последним словом, чтобы не обрезало текст на полуслове: слово1 слово2 слово3 слов...?
 
имхо проще найти первый пробел после заданного числа символов и резать до него

PHP:
$num=200;
$end=strpos($str,' ',$num);
$result=substr($str,0,$end);

зачем вставлять регекспы без повода ?
 
Или так :) Только искать бы надо назад, если 200 символов - максимум.
 
Если форматирование строки нестандартное, то слова могут разделяться не пробелом, а скажем, точкой. Т.е. искать надо регуляркой по нестроковым символам.
 
  • Заблокирован
  • #6
вообще этот метод легко не сработает, если к примеру строчка будет такой:

Код:
новая строчка, или<br>перенос на новую строку.

перед поиском пробела надо очистить текст от тегов (striptags), или хотя-бы сущностей (htmlentities).
 
вообще теоретикам стоит помнить, что любое частное решение быстрее м проще чем общее , хотя и не является универсальным

а еще это решение не будет работать если на системе не стоит интерпритатор php и т.д. .....
 
Можно так:
PHP:
<?php
$myvar = "слово1 слово2 слово3 слов...";

$var_exploded = explode( $myvar, " " );

$count = $i = 0;
$finish_string = "";

while ( $count < 200 )
{
   $count += strlen( $var_exploded[$i++] ) + 1;
   $finish_string .= $var_exploded[$i] + " ";
}
?>
 
cds, выглядит монстрически :)

Я в итоге сделал так (\S чтобы "положить" на локаль, остальное - стрипанье тегов и энтити, чтоб не мешались в анонсе, если не нужно - уберите:(
PHP:
  function GetOnlyPart($par_String, $par_Len) {
     $l_Result = preg_replace("|(.+)\s\S+|", "$1", (substr(strip_tags(html_entity_decode($par_String)), 0, $par_Len)));
     return $l_Result;
   }
 
монстрически, не монстрически, а вот по скорости должно делать любой preg_replace (не проверял)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху