Удалить html комментарии регуляркой

Тема в разделе "Регулярные выражения", создана пользователем TyT, 23 фев 2012.

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

    TyT Ня!

    Регистр.:
    19 июн 2006
    Сообщения:
    491
    Симпатии:
    201
    Есть огромный html файлик (24мега) дримвивер на нем загибается, потому для чистки использую ultraedit... вообщем составляю регулярное выражение на удаление штмл комментариев. банальный
    Код:
    <!\-\-.*\-\->
    не подходит потому что захватывает полезную инфу из двух комментов рядом расположеных.
    Потому возникла идея проверять предварительно на наличие --> предварительно, но так как с рег выражениями дела до этого плотного не имел, с трудом представляю какбы так составить условие :) Пока что в голову пришло вот такое:

    Код:
    <!\-\-([\s\S](?!(\-\->)))*.\-\->
    <!--(любой символ (но не перед(-->))*любой символ-->

    случайно пробежался по фалу вроде без ошибочно... но пока не рискую ко всему файлу применить :)

    p.s. вроде работает... по крайней мере на демо файлике ложных срабатываний нет:


    Код:
    <!-- ком@$%ментц //--> разная инфа низя удалить<!-- <!--! ком:+--<ментц <->-->разная инфа низя удалить <!-- ком
     
    ментц <- ->-->разная инфа низя удалить <!--<a hef=""> комментц //-->разная инфа низя удалить<!-- комм        ентц //--> <!-- комм!*ентц //-->
     
     
    <!-- комментц //--> разная инфа низя удалить<!-- <!--комментц <->-->разная инфа низя удалить <!-- комментц <- ->--> <!--<a
    hef=""> комментц //-->разная инфа низя удалить <!-- комментц //-->разная инфа низя удалить <!-- комментц--<#& //--> 
     
  2. Viodele

    Viodele Механик

    Administrator
    Регистр.:
    17 дек 2011
    Сообщения:
    110
    Симпатии:
    480
    Код:
    <!\-\-[^\>\<]?\-\->
    Так не вариант?
     
  3. TyT

    TyT Ня!

    Регистр.:
    19 июн 2006
    Сообщения:
    491
    Симпатии:
    201
    Неа, внутри коммента < > встречаются - вордовские теги типа <w:Autor></Autor>
    я потестил свой вариант - работает, так что вопрос снимается (уже по всему файлу прошелся)
     
  4. xpert13

    xpert13 <(*_*)>

    Moderator
    Регистр.:
    7 ноя 2008
    Сообщения:
    182
    Симпатии:
    453
    На будущее: есть такое понятие как жадная и ленивая квантификация. В вашем первом примере используется жадная квантификация, потому регулярка захватывает всё от первого начала комментария, по последнего. Если использовать ленивую квантификацию - тогда она будет искать от первого начала комментария до ближайшего окончания. Чтобы применить ленивую квантификацию достаточно добавить знак вопроса после зведочки. Таким образом ваша регулярка будет иметь следующий вид:
    Код:
    <!--.*?-->
    Так же убрал экранирование дифисов, оно здесь ни к чему.
     
    TyT нравится это.
Статус темы:
Закрыта.