我教自己Perl和我学习最好的例子。因此,我在学习一个简单的Perl脚本,擦伤的一个具体博客,并发现自己困惑的几regex发言。脚本看起来用于以下的大块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. 如何以下行工作:

    ([^"]*)#Anchor的名字

  2. 如何以下行工作:

    ([^>]*)#文章标题

  3. 什么是"六"意味着在下面的线:

    </dd>六)

感谢这么多事先对所有你的帮助!我也在研究解答我自己的问题的时刻,但是希望有人能给我一个提升!

有帮助吗?

解决方案

如何以下行工作...

([^"]*)#Anchor的名字

零个或更多的事情,而不是",捕获的,为1美元,2美元,或无论如何,取决于括号内(在我们是。

如何以下行工作...

([^>]*)#文章标题

零个或更多的事情,这是不>,捕获的,为1美元,2美元,或什么的。

什么是"六"的意思是的 下线路...

</dd>六)

  • s=比赛为单个行(这只是意味着"."匹配的一切,包括 ,它不会做否则)
  • i=匹配的情况不敏感的
  • x=忽略的空白在regex.

x 也使得它可以把意见变成regex本身,因此喜欢的东西 # Post title 只有评论意见。

看看 perldoc perlre 更多/更好的信息。该链接是Perl5.10.如果你没有Perl5.10你应该看看perlre文版本的Perl代替。

其他提示

  1. [^"]*表示<!>“任何不包含引号<!>”的零个或多个字符的字符串。这被引号包围,形成一个带引号的字符串,类型跟在<a name=
  2. 之后
  3. [^>]*与上面类似,它表示任何不包含>的字符串。请注意,这可能意味着[^<],匹配到下一个标记的开头<,不包括实际开放。
  4. 这是一个特定于php的regexp标志的集合。我知道i表示不区分大小写,不确定其余的。
  1. 代码是一个扩展的regex.它可以让你把空白和评论,在你的regex.见perldoc perlreperlretut.否则一样正常。

  2. 同的。

  3. 人物都是 regex剂.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top