Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.107.90] |
|
Сообщ.
#1
,
|
|
|
Есть такой скрипт
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. Почему? |
Сообщ.
#2
,
|
|
|
Mixxx, выдели ту сорок восьмую строчку, которую материт скрипт
|
Сообщ.
#3
,
|
|
|
Их тут всего 47..........................
|
Сообщ.
#4
,
|
|
|
p_kolya
$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] это не то что я думаю, хотя не уточнили что же это на самом деле вопрос остаётся открытым. |
Сообщ.
#5
,
|
|
|
\x8 -- это бэкспэйс, скорее всего, ненужный тебе. Факт.
Вот в восьмеричной системе циферки 8 не бывает, а это из матчасти, на которую Перл тщетно старается указать. Мне стыдно показывать пальцем на учебник по информатике, где системы исчисления описываются. Эрго 1: s/\\8/\\x08/g и отлаживай дальше. А может, имелся в виду и обратный слэш с восьмеркой. Эрго 2: Удвой слэш, и счастье удвоится. Но это скорее всего не то. |