Я новичок в Perl, и у меня есть несколько вопросов по регулярным выражениям

StackOverflow https://stackoverflow.com/questions/1605308

  •  05-07-2019
  •  | 
  •  

Вопрос

Я сам изучаю Perl и лучше всего учусь на собственном примере.Таким образом, я изучаю простой Perl-скрипт, который очищает конкретный блог, и обнаружил, что запутался в паре операторов регулярных выражений.Скрипт ищет следующие фрагменты html:

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

и вот пример сценария, который я изучаю:

#!/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));
}
}

Если у вас найдется минутка, чтобы лучше помочь мне понять, мои вопросы таковы:

  1. как работает следующая строка:

    ([^"]*) # Имя якоря

  2. как работает следующая строка:

    ([^>]*) # Заголовок сообщения

  3. что означает "шестерка" в следующей строке:

    </dd>/шесть)

Заранее большое спасибо за вашу помощь!В данный момент я также ищу ответы на свои собственные вопросы, но надеялся, что кто-нибудь сможет меня подтолкнуть!

Это было полезно?

Решение

как работает следующая строка...

([^"]*) # Имя якоря

ноль или более вещей, которые не являются ", записанными как $1, $2 или что-то еще, в зависимости от количества скобок ( в we are.

как работает следующая строка...

([^>]*) # Заголовок сообщения

ноль или более вещей, которые не >, записанные как $1, $2 или что-то еще.

Что означает «шесть» в следующей строке ...

</dd>/шесть)

  • s = совпадение в одну строку (это просто означает, что "." соответствует всему, включая , чего в противном случае не было бы)
  • i = совпадение без учета регистра
  • x = игнорировать пробелы в регулярном выражении.

x также позволяет добавлять комментарии в само регулярное выражение, поэтому такие вещи, как # Post title есть только комментарии.

Видеть перлдок для получения дополнительной/лучшей информации.Ссылка предназначена для Perl 5.10.Если у вас нет Perl 5.10, вам следует вместо этого просмотреть документ perlre для вашей версии Perl.

Другие советы

  1. [^"]* означает "любая строка из нуля или более символов, которая не содержит кавычек".Это окружено кавычками, образующими строку в кавычках следующего вида <a name=
  2. [^>]* аналогично приведенному выше, это означает любую строку, которая не содержит >.Обратите внимание, что вы, вероятно, имеете в виду [^<], соответствовать до открытия < для следующего тега, не включая фактическое открытие.
  3. это набор специфичных для php флагов регулярных выражений.Я знаю i означает, что регистр не чувствителен, не уверен насчет остального.
  1. Код представляет собой расширенное регулярное выражение.Это позволяет вам добавлять пробелы и комментарии в ваши регулярные выражения.См. перлдок перлр и Перлретут.В остальном вроде нормально.

  2. Такой же.

  3. Персонажи модификаторы регулярных выражений.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top