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

Тема в разделе "Регулярные выражения", создана пользователем x@nder, 25 май 2008.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. x@nder

    x@nder Постоялец

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

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

    Вот попробывал написать, но не получилось.
    Код:
     $text = preg_replace('#(>)(\w{5})(.*)(<)#',  '$1$2 $3$4', $text);    
    
    Можно ли это вообще сделать с помощью регулярки?
     
  2. mentanos

    mentanos Постоялец

    Регистр.:
    27 дек 2007
    Сообщения:
    128
    Симпатии:
    35
    в простейшем случае можно так (40 = после скольких слитных символов влеплять пробел)

    PHP:
    $text preg_replace('/(\w{40})/','\1 ',$text);
    попробуй, может тебе подойдет
     
  3. rootkit

    rootkit Постоялец

    Регистр.:
    4 апр 2007
    Сообщения:
    143
    Симпатии:
    27
    вот про эту функцию почитай wordwrap :)
     
  4. user22

    user22 Прохожие

    код не мой, но работает

    PHP:
    <?php
        $postbody 
    preg_replace_callback(
                  
    "|(\w{30,})|",
                  
    "split_text",
                  
    $postbody);
    function 
    split_text($matches
    {
      return 
    wordwrap($matches[1], 20' ',1);
    }
    ?> 
     
  5. prokopa

    prokopa

    Регистр.:
    27 июн 2007
    Сообщения:
    402
    Симпатии:
    105
    Вот так делал
    PHP:
    $title 'abwerwerqwererecdef<span></span>hijklmn';

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

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

            if (
    $wordwrap != 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);
     
  6. jam214

    jam214 Создатель

    Регистр.:
    6 авг 2010
    Сообщения:
    23
    Симпатии:
    0
    Добрый день.
    У меня вопрос как переделать ваш код для BBCode ?
     
  7. Dr.MIG

    Dr.MIG Создатель

    Регистр.:
    26 янв 2009
    Сообщения:
    18
    Симпатии:
    1
    Так может лучше воспользоваться чем-нибудь наподобие phpHypher и просто расставлять переносы в тексте?
     
Статус темы:
Закрыта.