私は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. 次の行の仕組み:

    ([^ <!> quot;] *)#アンカー名

  2. 次の行の仕組み:

    ([^ <!> gt;] *)#投稿タイトル

  3. <!> quot; six <!> quot;の機能次の行の意味:

    <!> lt; / dd <!> gt; / six)

ご協力いただきありがとうございます。私は現在、自分の質問に対する答えも調査していますが、誰かが私を後押ししてくれることを望んでいました!

役に立ちましたか?

解決

  

次の行の仕組み...

     

([^ <!> quot;] *)#アンカー名

<!> quotではない0個以上のもの。ブラケットの数に応じて、$ 1、$ 2、または何でもキャプチャされます(私たちはそうです。

  

次の行の仕組み...

     

([^ <!> gt;] *)#投稿タイトル

0個以上の<!> gt;ではないもの、$ 1、$ 2、またはその他のものとしてキャプチャされます。

  

<!> quot; six <!> quot;の機能で意味する   次の行...

     

<!> lt; / dd <!> gt; / six)

  • s =単一行として一致します(これは、<!> quot;。<!> quot;は、\ nを含むすべてに一致することを意味します。
  • i =大文字と小文字を区別しないで一致する
  • x =正規表現の空白を無視します。

xを使用すると、正規表現自体にコメントを挿入することもできるため、# Post titleのようなものはコメントだけです。

詳細/より良い情報については、 perldoc perlre をご覧ください。リンクはPerl 5.10用です。 Perl 5.10をお持ちでない場合は、代わりにご使用のバージョンのPerlのperlreドキュメントをご覧ください。

他のヒント

  1. [^"]*は、<!> quot;引用符を含まないゼロ個以上の文字列<!> quot;を意味します。これは、引用符で囲まれ、<a name=
  2. に続く種類の引用文字列を形成します
  3. [^>]*は上記と似ていますが、>を含まない文字列を意味します。おそらく[^<]を意味し、次のタグの開始<まで一致することに注意してください。実際の開始は含まれません。
  4. これは、PHP固有の正規表現フラグのコレクションです。 iは大文字と小文字を区別しないことを意味し、残りについてはわかりません。
  1. コードは拡張正規表現です。正規表現に空白とコメントを入れることができます。 perldoc perlre および perlretut 。それ以外は通常どおり。

  2. 同じ。

  3. 文字は正規表現修飾子です。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top