我是Perl的新手并且有一些正则表达式问题

Bea*_*red 1 html perl screen-scraping

我正在教自己Perl,我通过实例学习最好.因此,我正在研究一个简单的Perl脚本,它擦除了一个特定的博客,并发现自己对几个正则表达式语句感到困惑.该脚本查找以下html块:

 <dt><a name="2004-10-25"><strong>October 25th</strong></a></dt>
 <dd>
   <p>
     [Content]
   </p>
 </dd>
 ... and so on.
Run Code Online (Sandbox Code Playgroud)

这是我正在研究的示例脚本:

#!/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));
}
}
Run Code Online (Sandbox Code Playgroud)

如果你有时间更好地帮助我理解,我的问题是:

  1. 以下行如何工作:

    ([^"]*)#锚点名称

  2. 以下行如何工作:

    ([^>]*)#帖子标题

  3. "六"在以下行中的含义是什么:

    </ DD>/6)

非常感谢您的帮助!我现在也正在研究自己问题的答案,但希望有人能给我一个提升!

小智 7

以下几行如何运作......

([^"]*)#锚点名称

零或多个不是",被捕获为$ 1,$ 2或其他什么的东西,取决于括号的数量(我们是.

以下几行如何运作......

([^>]*)#帖子标题

零或多个不是>的东西,被捕获为$ 1,$ 2或其他什么.

"六"在以下几行中意味着什么......

</ DD>/6)

  • s =匹配为单行(这只是意味着"."匹配所有内容,包括\n,否则不会这样做)
  • i =匹配大小写不敏感
  • x =忽略正则表达式中的空格.

x也可以将注释放入正则表达式本身,所以像这样的东西# Post title只是注释.

有关更多/更好的信息,请参阅perldoc perlre.该链接适用于Perl 5.10.如果您没有Perl 5.10,则应该查看Perl版本的perlre文档.