Pergunta

Eu estou ensinando-me Perl e eu aprendem melhor pelo exemplo. Como tal, eu estou estudando um simples script Perl que raspa um blog específico e encontrei-me confuso sobre um par das demonstrações regex. Os olhares de script para os seguintes pedaços de html:

 <dt><a name="2004-10-25"><strong>October 25th</strong></a></dt>
 <dd>
   <p>
     [Content]
   </p>
 </dd>
 ... and so on.

e aqui está o script exemplo que eu estou estudando:

#!/usr/bin/perl -w

use strict;
use XML::RSS;
use LWP::Simple;
use HTML::Entities;

my $rss = new XML::RSS (version => '1.0');
my $url = "http://www.linux.org.uk/~telsa/Diary/diary.html";
my $page = get($url);

$rss->channel(title       => "The more accurate diary. Really.",
          link        => $url,
          description => "Telsa's diary of life with a hacker:" 
                 . " the current ramblings");

foreach (split ('<dt>', $page))
{
if (/<a\sname="
         ([^"]*)     # Anchor name
         ">
         <strong>
         ([^>]*)     # Post title
         <\/strong><\/a><\/dt>\s*<dd>
         (.*)        # Body of post
         <\/dd>/six)
{
    $rss->add_item(title       => $2,
               link        => "$url#$1",
                   description => encode_entities($3));
}
}

Se você tiver um momento para melhor me ajudar a entender, minhas perguntas são:

  1. Como o trabalho seguinte linha:

    ([^ "] *) # nome Anchor

  2. Como o trabalho seguinte linha:

    ([^>] *) # Publicar título

  3. O que faz o "seis" média na seguinte linha:

    / seis)

Muito obrigado antecipadamente por toda a sua ajuda! Eu também estou pesquisando as respostas às minhas próprias perguntas no momento, mas estava esperando que alguém poderia me dar um impulso!

Foi útil?

Solução

Como a seguinte linha de trabalho ...

([^ "] *) # nome Anchor

zero ou mais coisas que não são", capturado como US $ 1, US $ 2, ou qualquer outra coisa, dependendo do número de suportes (em que somos.

Como a seguinte linha de trabalho ...

([^>] *) # Publicar título

zero ou mais coisas que não são>, capturados como US $ 1, US $ 2, ou o que quer.

O que faz o "seis" média no seguinte linha ...

/ seis)

  • s = jogo como uma única linha (Isto apenas significa que "" corresponde a tudo, incluindo \ n, o que não faria de outra forma)
  • i = CASE jogo insensível
  • x = ignorar espaços em branco em regex.

x também torna possível para colocar comentários no próprio regex, então as coisas como # Post title há apenas comentários.

perldoc perlre para mais melhor informação /. O link é para Perl 5.10. Se você não tem Perl 5.10 você deve olhar para o documento perlre para sua versão do Perl em seu lugar.

Outras dicas

  1. meios [^"]* "qualquer seqüência de zero ou mais caracteres que não contém aspas". Esta é cercado por aspas fazendo formando uma cadeia entre aspas, do tipo que segue <a name=
  2. [^>]* é semelhante ao anterior, isso significa qualquer string que não contém >. Note aqui que você provavelmente média [^<], para corresponder até o < abertura para a próxima tag, não incluindo a abertura real.
  3. que é uma coleção de bandeiras regexp php específicos. Sei meios i maiúsculas e minúsculas, não tenho certeza sobre o resto.
  1. O código é uma expressão regular estendida. Ele permite que você coloque espaços em branco e comentários em suas expressões regulares. Veja perldoc perlre e perlretut . Caso contrário, como normal.

  2. Mesmo.

  3. Os personagens são regex modificadores .
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top