Как удалить лишнее, RegExp?

Тема в разделе "PHP", создана пользователем Tima111, 30 дек 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Tima111

    Tima111 Читатель

    Заблокирован
    Регистр.:
    5 июл 2007
    Сообщения:
    218
    Симпатии:
    486
    PHP:
    <?php
    $text
    ="Текст текст текст.
    <br>&nbsp;&nbsp;&nbsp;Текст текст текст.
    <br>&nbsp;&nbsp;&nbsp;Текст текст текст.
    <br>&nbsp;&nbsp;&nbsp;Текст текст текст.
    <br>&nbsp;&nbsp;&nbsp;
    <br>&nbsp;&nbsp;&nbsp;&nbsp;
    <br>&nbsp;&nbsp;&nbsp;Текст текст текст.
    <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Текст текст текст."
    ;
    ?>
    На выходе нужно:
    Код:
    Текст текст текст.
    <br>&nbsp;&nbsp;&nbsp;Текст текст текст.
    <br>&nbsp;&nbsp;&nbsp;Текст текст текст.
    <br>&nbsp;&nbsp;&nbsp;Текст текст текст.
    <br>&nbsp;&nbsp;&nbsp;Текст текст текст.
    <br>&nbsp;&nbsp;&nbsp;Текст текст текст.
    Нужно чтобы удалились <br>&nbsp;&nbsp;&nbsp; и больше &nbsp; после которых нету букв...
    И чтобы заменилось
    Код:
    <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Текст текст текст.
    на
    Код:
    <br>&nbsp;&nbsp;&nbsp;Текст текст текст.
     
  2. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    1. убрать пустые &nbsp;
    PHP:
    preg_replace('$<br>(&nbsp;){3,}\s+?\r\n$'''$text);
    2.убрать лишние &nbsp (более 3);
    PHP:
    preg_replace('$(&nbsp;){4,}$''&nbsp;&nbsp;&nbsp;'$text);
    UPD
    или не надо амперсанды эскейпить... не помню. лень смотреть

    UPD2
    Не надо, поправил. Поправил что в 1-м случае заменяется только пустая строка с тремя и более пробелами

    и все за один раз
    PHP:
    preg_replace('$(<br>(&nbsp;)+\s*\r\n)|((?:(?<=((&nbsp;){3}))&nbsp;)+\s*)$'''$text);
     
    Tima111 нравится это.
  3. Tima111

    Tima111 Читатель

    Заблокирован
    Регистр.:
    5 июл 2007
    Сообщения:
    218
    Симпатии:
    486
    antidote, огромное спасибо :thenks: работает :ay:
    Вот ещё проблема:
    PHP:
    <?php 
    $text
    ="Текст текст текст. 
    <br>&nbsp;&nbsp; Текст текст текст. 
    <br>&nbsp;&nbsp; Текст текст текст. 
    <br>&nbsp;&nbsp; Текст
    <br>&nbsp;&nbsp; Текст текст текст. 
    <br>&nbsp;&nbsp; Текст
    <br>&nbsp;&nbsp; Текст текст текст. 
    <br>&nbsp;&nbsp; Текст
    <br>&nbsp;&nbsp; Текст текст текст."

    ?>
    На выходе нужно:
    Код:
    Текст текст текст. 
    <br>&nbsp;&nbsp; Текст текст текст. 
    <br>&nbsp;&nbsp; Текст текст текст. 
    <br>&nbsp;&nbsp; Текст текст текст. 
    <br>&nbsp;&nbsp; Текст текст текст. 
    <br>&nbsp;&nbsp; Текст текст текст.
    
    Надо чтобы удалились строки, которые начинаются на
    Код:
    <br>&nbsp;&nbsp; 
    и в которых нет точки. Только в конце каждой строки может быть точка, а потом пробел (как в примере) - это удалять не нужно.
    Или это только через explode и проверку вхождения точки в каждой строке можно реализовать?
     
  4. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    Как-нибудь так попробуйте
    PHP:
    preg_replace('$<br>(&nbsp;){2}\s*[^\.?:(?!(\.))]+\s?\r\n$'''$text);
    или все вместе с предыдующим куском
    PHP:
    preg_replace('$(<br>(&nbsp;){3,}\s*\r\n)|((?:(?<=((&nbsp;){3}))&nbsp;)+\s*)|(<br>(&nbsp;){2}\s*[^\.?:(?!(\.))]+\s*\r\n)$'''$text);
     
    Tima111 нравится это.
  5. Tima111

    Tima111 Читатель

    Заблокирован
    Регистр.:
    5 июл 2007
    Сообщения:
    218
    Симпатии:
    486
    antidote, огромное спасибо за помощь :thenks:
    Но регулярное выражение как-то не так работает, там где есть двоеточия, строка не удаляется.
    Сделал через explode, но теперь понял что это тоже не верно, ведь есть предложения где есть и восклицательный знак и вопросительный, их тоже не надо удалять.
    Хотя можно пропустить вообще через несколько проверок и на восклицательный и на вопросительный знак, но тогда совсем медленно будет работать :(

    PHP:
    <?php
    $text
    ="<br>&nbsp;&nbsp; Текст текст текст.
    <br>&nbsp;&nbsp; Текст текст текст!
    <br>&nbsp;&nbsp; Текст текст текст? 
    <br>&nbsp;&nbsp; Текст: текст 
    <br>&nbsp;&nbsp; Текст: текст!"
    ;

    $exp=explode("
    "
    $text);
    $text="";
    for (
    $i=0$i<=count($exp); $i++) {
    if ((
    substr_count($exp[$i],"."))>0) {$text=$text.$exp[$i];}
                    }
    echo 
    $text;
    ?>
    Нужно чтобы в переменной текст осталось:
    Код:
    <br>&nbsp;&nbsp; Текст текст текст.
    <br>&nbsp;&nbsp; Текст текст текст!
    <br>&nbsp;&nbsp; Текст текст текст? 
    <br>&nbsp;&nbsp; Текст: текст!
    Может можно через регулярное выражение сделать?
     
Статус темы:
Закрыта.