Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обрезание текста до определенного символа + длина 
:(
    Опции темы
spamoney
Дата 8.3.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 8.7.2008

Репутация: нет
Всего: нет



Здравствуйте, помогите правильно составить регулярку, что бы если строка более N-го количества символов (допустим более 40), то эта строка обрезается по последний пробел, пробывал сам, вот что получилось:

Код

function cut ($str, $dlina='40') {
if (preg_match('#^([\s\S]{'.$dlina.'}[^\!\.\?]*)[\.\!\?]#i',strip_tags($str),$match)) $code = $match[1];
else if (preg_match('#^([\s\S]{'.$dlina.'}[^\ \ ]*)[\ \ ]#i',strip_tags($str),$match)) $code = $match[1];

return $code; 
    }


$text='Исследование программных продуктов, защит программного обеспечения, низкоуровневое программирование';
echo "Символов до: ".strlen(strip_tags($text))."<br />";
$text=cut($text);
echo "$text<br />";
echo "Символов после: ".strlen(strip_tags($text))."<br /><br /><br />";


$text='Исследование программных продуктов, защитатников';
echo "Символов до: ".strlen(strip_tags($text))."<br />";
$text=cut($text);
echo "$text<br />";
echo "Символов после: ".strlen(strip_tags($text))."<br />";


но функция cut(); работает только если текст более 40 символов и после этих 40 символов есть пробел, вот код выполнения:

Код

Символов до: 99
Исследование программных продуктов, защит
Символов после: 41


Символов до: 48

Notice: Undefined variable: code in script.php on line 8

Символов после: 0


А нужно что бы было так:
Код
Символов до: 99
Исследование программных продуктов, защит
Символов после: 41


Символов до: 48
Исследование программных продуктов
Символов после: 34

PM MAIL   Вверх
bars80080
Дата 8.3.2009, 16:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



Код

function cut($x) {
    if(strlen($x) > 40) {
        $x = substr($x, 0, 40);
        $y = strrpos($x, ' ');
        $x = substr($x, 0, $y);
    }
    return $x;
}

PM MAIL WWW   Вверх
spamoney
Дата 9.3.2009, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 8.7.2008

Репутация: нет
Всего: нет



Что бы не создавать еще одну тему, такой вопрос:

Необходимо сделать, так чтобы, если в конце предложения есть какие-либо символы (-,.!? и т.д.), то их все из конца предложения необходимо вырезать, т.е. допустим, есть строчка:
Код

$str='Символы! В конце этого предложения!?';

из неё нужно получить такую:
Код

Символы! В конце этого предложения



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

bars80080, пасиб) воспользвался немного другим решением (by Gifts):

Код

function cut($str,$len=40) { 
if (strlen($str)<=$len) return $str; 
else {return preg_replace('~ [^ ]*$~','',substr($str,0,$len));} 
}

PM MAIL   Вверх
enof
Дата 9.3.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 35



Код

$str = "Символы! В конце этого предложения!?";
$str = preg_replace('#[-!?.,]*$#','',$str);
echo $str;


Это сообщение отредактировал(а) enof - 9.3.2009, 14:55
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0616 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.