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


Автор: spamoney 8.3.2009, 15:07
Здравствуйте, помогите правильно составить регулярку, что бы если строка более 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

Автор: bars80080 8.3.2009, 16:08
Код

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

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

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

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

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

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



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

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

Код

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

Автор: enof 9.3.2009, 14:55
Код

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

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