Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > HTTP сервера > Удалить все коментарии в HTML файле одни


Автор: Mixxx 12.08.04, 13:32
Есть такой скрипт
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    use strict;
    my $p=q~
    <script>
    alert("<!--")
    </script>
    1{<!-- REMOVE ME PLEASE  -->}
    <h1>header</h1>
     
    <style type="text/css">
    <!--
    img{border:1px solid red;content:"-->"}
    -->
    </style>
    <img src="23.gif" ismap />2{<!-- <- :) -->}
    <img src="23.gif" />3{<!--545ds-->}
    <img alt="<!--" ismap src="img.gif" title='-->' >
    4{<!--
    comment
    -->}
    <a title='-->' >aaa</a>
    5{<!--se -->}
     
    <script >
    <!--
    alert("<!-- -->")
    //-->
    </script>
     
    <p align=center title=8742>
    6{<!-- z332 <a href= 324> -->}
    ~;
     
    # РегВыр находит Либо любой тег кроме "<!DOCTYPE..." и "<?xml...", либо
    # пару тегов script или style (открывающий и закрывающий теги)
    # В этот рег четыре раза внедрена конструкция (?(условие)да-паттерн|нет-паттерн):
    # первый раз для понимания с чем мы имеем дело с комментарием или с обычным тегом,
    # второй раз для обработки значений аттрибутов тегов которые не заключены в кавычки.
    # третий и четвёртый для того чтобы находить закрывающие пары для тегов <script...> и <style...>
    # Парсить атрибуты надо т.к можно напороться на вот такую конструкцию:
    # <img alt="<!--" src="img.gif" title='-->' >
    # т.е атрибут может содержать символ - ">" на котором запореться, на превый взгляд рабочий, регВыр типа:
    # <\w+[^>]*>
    $p=~s/(<(\/)?((!--)|(script)|(style)|\w+)(?(4).*?-->|(\s+\w+(?:\s*=\s*(["'])?(?(8)[^\8]+?\8|\S+?(?=[>\s])))?)*?\s*\/?>(?(5).*?<\/script>|(?(6).*?<\/style>))))/$1 if !$4/gise;
    print $p;

он работает но при параметре -w
Вылазят два одинаковых предупреждения
Цитата

Illegal octal digit '8' ignored at C:\docs\mydocs\perl\HTMLcommentEraser2.pl line 48.
Illegal octal digit '8' ignored at C:\docs\mydocs\perl\HTMLcommentEraser2.pl line 48.


Почему?

Автор: p_kolya 12.08.04, 15:08
Mixxx, выдели ту сорок восьмую строчку, которую материт скрипт

Автор: Rom@nych 12.08.04, 15:22
Их тут всего 47..........................

Автор: Mixxx 12.08.04, 15:40
p_kolya
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    $p=~s/(<(\/)?((!--)|(script)|(style)|\w+)(?(4).*?-->|(\s+\w+(?:\s*=\s*(["'])?(?(8)[^\8]+?\8|\S+?(?=[>\s])))?)*?\s*\/?>(?(5).*?<\/script>|(?(6).*?<\/style>))))/$1 if !$4/gise;


Мне сказали что это из-за того что [^\8] это не то что я думаю, хотя не уточнили что же это на самом деле :) вопрос остаётся открытым.

Автор: Ho Im 12.08.04, 16:25
\x8 -- это бэкспэйс, скорее всего, ненужный тебе. Факт.

Вот в восьмеричной системе циферки 8 не бывает, а это из матчасти, на которую Перл тщетно старается указать. Мне стыдно показывать пальцем на учебник по информатике, где системы исчисления описываются.

Эрго 1:
s/\\8/\\x08/g и отлаживай дальше.

А может, имелся в виду и обратный слэш с восьмеркой.

Эрго 2:
Удвой слэш, и счастье удвоится. Но это скорее всего не то.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)