Помогите выделить тэги в Perl
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Помогите выделить тэги в Perl Expand / Collapse
Автор
Сообщение
18.10.2001 19:21
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 13.11.2001 21:24
Сообщ.: 5, Visits: 56
Помогите плиз решить проблему. Допустим в .txt-файле есть строка типа
<OS><Linux></OS>

С помощью каких функций или кода можно разбить эту строку на подстроки вида <OS>, <Linux> и </OS>
Сообщ. #729063
19.10.2001 10:30
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 19.02.2002 13:01
Сообщ.: 164, Visits: 1 805
$t = "<OS><Linux></OS>";
print $t,"";
if ($t =~ /(<\w+>)(<\w+>)(<\/\w+>)/) {
print $1, " ",$2, " ", $3;
}
Сообщ. #729133
27.10.2001 16:50
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 15.03.2003 7:02
Сообщ.: 88, Visits: 980
2spartak

это пример исключтельно для того варианта который DarkPerl предложил.
:)

2DarkPerl
смотря для чего тебе надо их вырезать? если тебе надо просто удалить из текста все теги - то могу посоветовать свой собственный парсер:

@fval=split(/&/,$buf);
foreach $i (0 .. $#fval){
($name,$val)=split (/=/,$fval[$i],2);
$val =~ tr/+/ /;
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$val =~ s/<!--(.|)*-->//g;
$val =~ s/<([^>]|)*>//g;
$name=~tr/+/ /;
$name=~ s/%(..)/pack("c",hex($1))/ge;
if (!defined($field{$name})) {
$field{$name}=$val;
}
else {
$field{$name} .= ",$val";
}
}


здесь текст перекодируется если в нем есть символы вида %XX (так русский в урлах передается), и вырезаются все теги.
Резка тегов более-менее умная и почти всегда устраивает, но вообще для этих целей существует модуль LWP. Это глобальный набор модулей на все случаи жизни для веб-програминга. В него входит модуль HTML::Parser который занимается именно разбором HTML. У него это получается намного лучше.

А вообще вопрос написания парсера, многими ОЧЕНЬ недооценивается! Резать абсолютно правильно очень и очень непросто... Вот только некоторые примеры вполне нормального HTML, с которыми возникают траблы почти у всех...
Пример 1:

<img src="1.gif" alt="A > B">

Пример 2:

<script>if (a<b && b>a) {}</script>

Пример 3:

<!-- <Комментарий> -->


а теперь все дружно проверили, как у них реагируют ИХ обработчики на такой код...:)
Сообщ. #730224
27.10.2001 21:51
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 13.11.2001 21:24
Сообщ.: 5, Visits: 56
Всем большое спасибо, тему можно закрывать, свою проблему уже решил :))
Сообщ. #730261
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 12:34