Обрезка с конца строки до точки в PHP

PHP
Обрезка с конца строки до конца предложения — точки
Задача такая… Обрезается текст по словам, нужно обрезать то, что получилось по последней точке. Тем самым сохранить целостность предложений.

Вот такая маленькая функция решила для меня эту задачу:

// $string - строка, которую нужно укоротить
function trim_to_dot($string) {
    $pos = strrpos($string, '.'); // поиск позиции точки с конца строки
    if (!$pos) {
        return $string; // если точка не найдена - возвращаем строку
    }
    return substr($string, 0, $pos + 1); // обрезаем строку используя количество 
                                         // символов до точки + 1 (сама точка, 
                                         // если она не нужна "+1" нужно убрать)
}// конец функции
  • +1
  • 06 сентября 2012, 16:43
  • igorrius

Комментарии (5)

RSS свернуть / развернуть
Ну если топором, то по-моему так симпатичней:
$separator = array('?', '!', ',', '.');//массив нужніх нам разделителей
$i =0;
do{
	$i++;
}while(!in_array($string[$i], $separator) && $i <= strlen($string));//проходим по строке, пока не перевалим за ее длину, или не найдем в строке символ из наших разделителей предложения
return substr($string, 0, $i);
0
Хочу заметить, что в данном случая я ищу точку с конца, а Ваш код вернёт первое предложение. Но идея с тем, что предложение может оканчиваться не только на "." мне по душе)
+1
Меняем чуть-чуть код и вуаля:

$separator = array('?', '!', ',', '.');//массив нужніх нам разделителей
$i =strlen($string);
do{
        $i--;
}while(!in_array($string[$i], $separator) && $i >= 0);//проходим по строке в обратном направлении
return substr($string, 0, $i);
+1
Другое дело)))
0
Обновлённый вариант — обрезка до точки с использованием регулярных выражений.

function trim_to_dot($string) {
	$pattern = '/.+?[\?|\!|\.]/';
	$result = array();
	if (preg_match($pattern, $string, $result) && !empty($result[0])){
		return $result[0];
	}else{
		return $string;
	}
}
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
comments powered by Disqus