За последние 24 часа нас посетили 18819 программистов и 1650 роботов. Сейчас ищут 942 программиста ...

Логическое "НЕ" для группировок в классе символов

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

  1. newroze

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

    С нами с:
    19 авг 2009
    Сообщения:
    10
    Симпатии:
    0
    Стоит проблема удаления всех html-тэгов за исключением разрешённых.

    Пытаюсь сделать такую маску на примере двух разрешённых тегов:
    /\<\s*[\/]*\s*[^(div)|(ul)]+\s*?.*?\>/i

    Тобишь суть в том что шаблон [^(div)|(ul)]+ не срабатывает, он должен звучать как НЕ (DIV или UL). Группировка символов насколько я понял тут не срабатывает.
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    пичитайте про негативные проверки
     
  3. newroze

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

    С нами с:
    19 авг 2009
    Сообщения:
    10
    Симпатии:
    0
    Спасибо за наводку.

    Нашёл решение. С помощью опережающей негативной проверки.
    Сокращённо выглядит так(perl):

    my @tags = ('body', 'ol', 'ul', 'li', 'strong', 'em', 'strike', 'p'); # Разрешённые теги
    my $tagsPatt = join('|', @tags);
    $htmlText =~ s/<\s*\/*?\s*(?!$tagsPatt)\b.*?>//gim; # Режем теги, не входящие в список разрешённых
    print $htmlText;