Вопрос по регулярке(PHP). Как разрезать длинные слова не трогая тегов.

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

x@nder

Постоялец
Регистрация
3 Апр 2007
Сообщения
131
Реакции
8
День добрый.
Обладая скудными знаниями по регулярным выражениям, не могу справится с такой задачей.

Есть уже сгенеренная страница.
В ней иногода присутствуют очень длинные слова, которые разрушают дизайн.
Хочу порезать эти слова, естественно не трогая HTML теги.

Вот попробывал написать, но не получилось.
Код:
 $text = preg_replace('#(>)(\w{5})(.*)(<)#',  '$1$2 $3$4', $text);

Можно ли это вообще сделать с помощью регулярки?
 
в простейшем случае можно так (40 = после скольких слитных символов влеплять пробел)

PHP:
$text = preg_replace('/(\w{40})/','\1 ',$text);

попробуй, может тебе подойдет
 
вот про эту функцию почитай wordwrap :)
 
код не мой, но работает

PHP:
<?php
    $postbody = preg_replace_callback(
              "|(\w{30,})|",
              "split_text",
              $postbody);
function split_text($matches) 
{
  return wordwrap($matches[1], 20, ' ',1);
}
?>
 
Вот так делал
PHP:
$title = 'abwerwerqwererecdef<span></span>hijklmn';

function fetch_word_wrapped_string($text, $limit = false)
{
        $wordwrap = 10;

        if ($limit)
        {
                $wordwrap = $limit;
        }

        if ($wordwrap != 0 AND !empty($text))
        {
                return preg_replace('#([^\s&/<>"\\-\[\]]|&[\#a-z0-9]{1,7}){' . $wordwrap . '}#i', '$0  ', $text);

        }
        else
        {
                return $text;
        }
}

 $title = fetch_word_wrapped_string($title,5);
 
Вот так делал
PHP:
$title = 'abwerwerqwererecdef<span></span>hijklmn';
function fetch_word_wrapped_string($text, $limit = false)
{
        $wordwrap = 10;
        if ($limit)
        {
                $wordwrap = $limit;
        }
        if ($wordwrap != 0 AND !empty($text))
        {
                return preg_replace('#([^\s&/<>"\\-\[\]]|&[\#a-z0-9]{1,7}){' . $wordwrap . '}#i', '$0  ', $text);
        }
        else
        {
                return $text;
        }
}
 $title = fetch_word_wrapped_string($title,5);
Добрый день.
У меня вопрос как переделать ваш код для BBCode ?
 
Так может лучше воспользоваться чем-нибудь наподобие phpHypher и просто расставлять переносы в тексте?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху