За последние 24 часа нас посетили 17088 программистов и 1345 роботов. Сейчас ищут 1495 программистов ...

Вложенные теги

Тема в разделе "Регулярные выражения", создана пользователем AlexSid, 18 сен 2006.

  1. AlexSid

    AlexSid Активный пользователь

    С нами с:
    18 сен 2006
    Сообщения:
    2
    Симпатии:
    0
    Адрес:
    Москва
    Есть некий текст, например
    Код (Text):
    1. [q=XENom39][q=AlexSid][q=XENom39][q=AlexSid] [b]Kyper[/b]: не, ну совсем уж жесть я удаляю практически сразу...[/q]
    2. А вот для "жести" раздельчик непомещает!! =)[/q]Помешает![/q]
    3. Смотря что понимать под "жестью" =)[/q]
    4. НУ жесть если будет в отдельной директории это будет ништяк!!!>-)
    5.  
    6. [q=Макс]Можно вопрос: так значит кабелем DCA 540 нельзя даже патчить в В_Клей мой сх70?[/q]
    7. Нельзя.
    8. [url=http://sim65.ucoz.ru/publ/4-1-0-8]Data-кабели для Siemens x65[/url]
    [q][/q] как вы наверное уже догадались - цитаты, причем они могут быть вложенными.
    Как грамотно вырезать из этого текста цитаты?
    т.е. что-бы осталось:
    Код (Text):
    1. НУ жесть если будет в отдельной директории это будет ништяк!!!>-)
    2.  
    3. Нельзя.
    4. [url=http://sim65.ucoz.ru/publ/4-1-0-8]Data-кабели для Siemens x65[/url]
    Или проще говоря:
    Как из строки выделить подстроку по некоему условию НЕ содержащую некоторое слово?
     
  2. AlexSid

    AlexSid Активный пользователь

    С нами с:
    18 сен 2006
    Сообщения:
    2
    Симпатии:
    0
    Адрес:
    Москва
    Сам покопался и нашёл:
    Код (Text):
    1. while (preg_match("#\[q=.*\[\/q\]#isU",$st)>0)
    2.     $st=preg_replace("#\[q=((?:(?!\[q=).)*)\[\/q\]#isU","",$st);
     
  3. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Пост слегка запоздавший конечно, но я тут копался с этим не так давно, может кому понадобиться ещё (какраз с цитатами, безлимитрое кол-во вложений)
    Код (Text):
    1.  
    2. $pattern = array('/\[quote\=\"([^\"]+)\"\]/i', '/\[quote\]/i', '/\[\/quote\]/i');
    3.        
    4. $replacement = array(
    5. '<div align="center" style="padding: 10px 30px 10px 20px;"><div style="font-weight: bold; padding-bottom: 5px;" align="left">$1 '._("писал(а)").'</div><div style="border: 1px solid #a6a6a6; background-color: #eaeaea; padding: 7px; text-align: left;">',
    6. '<div align="center" style="padding: 10px 30px 10px 20px;"><div style="font-weight: bold; padding-bottom: 5px;" align="left">'._("Цитата").'</div><div style="border: 1px solid #a6a6a6; background-color: #eaeaea; padding: 7px; text-align: left;">$1',
    7. '</div></div>');
    8. $string = preg_replace($pattern, $replacement, $string);