[SP-pm] Dúvida sobre $1 em percorrer linhas.
Daniel de Oliveira Mantovani
daniel.oliveira.mantovani at gmail.com
Sun Sep 28 09:07:25 PDT 2008
Se você RTFM (perldoc perlre), encontrará os quatro possíveis
caracteres que modificam o comportamento global da expressão regular:
i
Do case-insensitive pattern matching.
If use locale is in effect, the case map is taken from the current
locale. See the perllocale manpage.
m
Treat string as multiple lines. That is, change ``^'' and ``$''
from matching
the start or end of the string to matching the start or end of any
line anywhere within the string.
s
Treat string as single line. That is, change ``.'' to match any character
whatsoever, even a newline, which normally it would not match.
The /s and /m modifiers both override the $* setting. That
is, no matter what $* contains, /s without /m will force
``^'' to match only at the beginning of the string and ``$'' to match
only at the end (or just before a newline at the end) of the string.
Together, as /ms, they let the ``.'' match any character whatsoever,
while still allowing ``^'' and ``$'' to match, respectively, just after
and just before newlines within the string.
x
Extend your pattern's legibility by permitting whitespace and comments.
Obrigado Nelson.
Eu não sabia que o $data->content(), retornava um scalar, ou melhor nunca
tinha pensado nisso.
"NÃO PODEM SER USADAS PARA INTERPRETAR HTML OU XML."
Entendi
Se você quer aprender a programar e a manipular HTML e a extrair dados de
páginas da web com isso, eu recomendo o Web::Scraper, do Tatsuhiko Miyagawa:
http://search.cpan.org/~miyagawa/Web-Scraper-0.24/lib/Web/Scraper.pm<http://search.cpan.org/%7Emiyagawa/Web-Scraper-0.24/lib/Web/Scraper.pm>
Eu não consegui extrair, o que eu extrai com meu REG, usando o módulo. Pode
me dar umas dicas, por favor?
O Gabriel me mandou estudar algumas coisas e olha ->
m#</strong><br><i>\((.+?)\)</i></td>#ig && print DATA $1,$/ foreach
split("$/",$data->content());
Obrigado a todos pela atenção.
2008/9/27 Luis Motta Campos <luismottacampos em yahoo.co.uk>
> Daniel de Oliveira Mantovani wrote:
>
>> Boa Noite
>>
>> Seguinte : Se eu pegar a fonte deste site:
>> http://www.hgcinema.com.br/programacao/index.php , salvar em um txt,
>> como no caso abaixo "cinema.txt", funciona perfeitamente.
>>
>> open CINE,"<","cinema.txt" or die "Nao pode abrir cinema.txt\n"; my
>> @cinema = <CINE>; m#</strong><br><i>\((.+?)\)</i></td># && print
>> $1,$/ foreach @cinema;
>>
>> Agora, se eu pego direito da Internet só pega a primeira linha. open
>> DATA,">>","database.db" or die "Não pode abrir database.db\n"; my
>> $database = WWW::Mechanize->new(); $database->get('
>> http://www.hgcinema.com.br/programacao/index.php'<http://www.hgcinema.com.br/programacao/index.php%27>);
>> m#</strong><br><i>\((.+?)\)</i></td># && print $1,$/ foreach
>> $database->content;
>>
>> Não entendi, pois pelo que eu "sei" deveria funcionar da mesma forma,
>> afinal os dois contém a mesma coisa.
>>
>
> Você, prá variar, não presta atenção no que está fazendo.
>
> Se você tivesse RTFM, saberia que WWW::Mechanize::content() retorna o
> texto *todo* em uma linha, enquanto que "perldoc -f open" vai te
> explicar que ler um arquivo texto em contexto de lista (como você fez)
> te retorna uma lista de elementos separados por $/ (que normalmente
> contém "\n").
>
> Assim, você não sabe nada, não presta atenção, não lê o manual e não
> sabe com o que está mexendo: open() e content() retornam coisas
> diferentes, de formas diferentes, e você está assumindo que são iguais.
>
> Então, estou me esforçando se eu não me engano eu estava falando com
>> o Wendel um tempo atrás ou com o Blabos ou com o Gabriel, e tem um
>> caractere que transforma tudo em uma linha só, pois acho que quando puxa
>> direito da Internet ele não percorre todas as linhas, único
>> problema que não lembro qual é esse caractere.
>>
>
> O "caracter que transforma tudo em uma linha" que você está procurando não
> existe. A gente tem uma "opção de expressão regular" que aplica a expressão
> múltiplas vezes contra uma mesma string, numa espécie de loop (/g). Mas isso
> não vai fazer o que você quer, também.
>
> Eu já te disse uma vez, e você continua teimando. Se você quer aprender a
> usar expressões regulares, precisa aprender que expressões regulares NÃO
> PODEM SER USADAS PARA INTERPRETAR HTML OU XML.
>
> Se você quer aprender a programar e a manipular HTML e a extrair dados de
> páginas da web com isso, eu recomendo o Web::Scraper, do Tatsuhiko Miyagawa:
>
> http://search.cpan.org/~miyagawa/Web-Scraper-0.24/lib/Web/Scraper.pm<http://search.cpan.org/%7Emiyagawa/Web-Scraper-0.24/lib/Web/Scraper.pm>
>
> Também recomendo que você tente aprender a usar parsers prontos, como o
> XML::Compile, do Mark Overmeer; o XML::TreeBuilder, do Sean Burke; e até
> mesmo o XML::Twig, do Michael Rodriguez.
>
> Finalmente, mas não menos importante, leia alguma coisa sobre o Perl
> Debugger ("perldoc perldebug") -- assim, você vai pelo menos conseguir dizer
> que estruturas de dados você tem no seu programa, e talvez consiga fazer
> perguntas mais inteligentes que as que você tem feito.
>
> Putamplexos.
> --
> Luis Motta Campos is a software engineer,
> Perl Programmer, foodie and photographer.
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
--
print
"\x54\x68\x65\x20\x53\x69\x6c\x65\x6e\x74\x20\x47\x75\x61\x72\x64\x69\x61\x6e",$/
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20080928/403c7bf0/attachment.html>
More information about the SaoPaulo-pm
mailing list