문제

나는 나 자신을 가르치고 있으며 예를 들어 가장 잘 배웁니다. 따라서, 나는 특정 블로그를 긁어 내고 Regex 문의 몇 가지에 대해 혼란스러워하는 간단한 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. "Six"는 다음 줄에서 무엇을 의미합니까?

    u003C/dd>/여섯)

모든 도움에 미리 감사드립니다! 나는 또한 현재 내 자신의 질문에 대한 답을 연구하고 있지만 누군가가 나에게 부스트를 줄 수 있기를 바랐다!

도움이 되었습니까?

해결책

다음 줄은 어떻게 작동합니까 ...

([^"]*) # 앵커 이름

괄호 횟수에 따라 1, $ 2 또는 무엇이든 캡처하지 않은 0 이상의 것들 (우리는 우리입니다.

다음 줄은 어떻게 작동합니까 ...

([^>]*) # 게시물 제목

0 이상이 아닌 것 이상, $ 1, $ 2 또는 무엇이든 캡처했습니다.

"Six"는 다음 줄에서 무엇을 의미합니까?

u003C/dd>/여섯)

  • s = 단일 줄로 일치합니다 (이것은 단지 "를 의미합니다.". "는 n을 포함하여 모든 것을 일치시킵니다.
  • i = 매치 케이스는 무의미합니다
  • x = Regex에서 공백을 무시합니다.

x 또한 Regex 자체에 의견을 넣을 수있게 해주므로 # Post title 댓글이 있습니다.

보다 Perldoc Perlre 더 많은 / 더 나은 정보를 위해. 링크는 Perl 5.10입니다. Perl 5.10이 없다면 Perl 버전의 Perlre 문서를 대신 살펴 봐야합니다.

다른 팁

  1. [^"]* "따옴표가 포함되지 않은 0 이상의 문자열"을 의미합니다. 이것은 인용 된 문자열을 형성하는 인용문으로 둘러싸여 있습니다. <a name=
  2. [^>]* 위와 유사하며 포함하지 않는 문자열을 의미합니다. >. 여기서 당신은 아마도 의미가 있습니다 [^<], 개구부까지 일치합니다 < 다음 태그의 경우 실제 개구부를 포함하지 않습니다.
  3. 그것은 PHP 특정 regexp 플래그 모음입니다. 알아요 i 나머지는 확실하지 않은 경우를 의미합니다.
  1. 코드는 확장 된 정규식입니다. 그것은 당신이 당신의 regexes에 공백과 댓글을 넣을 수있게합니다. Perldoc을 참조하십시오 Perlre 그리고 Perlretut. 그렇지 않으면 정상처럼.

  2. 같은.

  3. 캐릭터입니다 Regex 수정 자.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top