|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Kirill Solomko 2:5020/400 12 Mar 2002 22:07:36 To : Andrey Sapozhnikov Subject : Re: регистр!?! -------------------------------------------------------------------------------- Andrey Sapozhnikov <sapa@icb.chel.su> wrote: > Denis Roshchin wrote: >> Добрый день. >> >> Мне надо разобрать html-файл и вынуть оттудова >> некоторые значения. (в часности то, что между >> <title> и </title> и некоторые meta-тэги). >> проблема в том, что оно может быть как в маленьких так >> и в больших буквах написано (именно системные слова, >> то есть "title", "Title", или "TITLE".) >> я сделал, все работает, но программа завалилась в момент >> когда появилась html-ка где все написанно большими буквами :(( >> >> у меня, допустим: >> $content =~ /.*<meta name="creator" content="(.*)">.*/g;$creator = $1; >> >> ps. ну я понимаю, что можно пройти напролом, да при считывании все символы >> поднять (uc, да?) - но мне нужно само значение-то >> с правельным регистром. (то есть можно два раза один и тот-же >> файл открывать, в одном искать, во втором уже по номеру символа но >> муторно... может проще как??) > > Прочитать perldoc perlop и perldoc perlre на предмет модификатора i в > регулярных выражениях. Кроме того, модификатор g в данном случае не > нужен. Кроме того, начальная .* и конечная .* тоже не нужны. А > вместо (.*) явно стоит использовать (.*?). Еще стоит проверить > результат выражения, ибо может данного тега в строке и не встретиться. > Hу а на досуге почитать perldoc HTML::Parser. Если этот скрипт не разовая > поделка, то возможно этот модуль Вам пригодится. > > Андрей > perldoc HTML::Parser - тебе поможет :-) навскидку для твоей задачи: #!/usr/bin/perl -w # use strict; use HTML::Parser; my $file = '/tmp/mytest.html'; HTML::Parser->new(api_version => 3, unbroken_text => 1, handlers => [start => [\&start_h,"self,tagname"], end => [\&end_h,"self,tagname"], ])->parse_file($file) or die "Can't start parsing file: $!\n"; sub start_h { my ($self,$tag) = @_; return unless $tag eq 'title'; $self->handler(text => \&text_h,"text"); } sub end_h { my ($self,$tag) = @_; $self->eof if $tag eq 'title'; } sub text_h { my $text = shift; $text =~ s/\s+//g; print $text,"\n"; # or do whatever you need :-) } -- / Loki / --- ifmail v.2.15dev5 * Origin: Unknown (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/9138918ce841.html, оценка из 5, голосов 10
|