나는 Perl을 처음 접했고 몇 가지 Regex 질문이 있습니다.
-
05-07-2019 - |
문제
나는 나 자신을 가르치고 있으며 예를 들어 가장 잘 배웁니다. 따라서, 나는 특정 블로그를 긁어 내고 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));
}
}
더 잘 이해할 수있는 순간이 있다면 내 질문은 다음과 같습니다.
다음 줄은 어떻게 작동합니까?
([^"]*) # 앵커 이름
다음 줄은 어떻게 작동합니까?
([^>]*) # 게시물 제목
"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 문서를 대신 살펴 봐야합니다.
다른 팁
[^"]*
"따옴표가 포함되지 않은 0 이상의 문자열"을 의미합니다. 이것은 인용 된 문자열을 형성하는 인용문으로 둘러싸여 있습니다.<a name=
[^>]*
위와 유사하며 포함하지 않는 문자열을 의미합니다.>
. 여기서 당신은 아마도 의미가 있습니다[^<]
, 개구부까지 일치합니다<
다음 태그의 경우 실제 개구부를 포함하지 않습니다.- 그것은 PHP 특정 regexp 플래그 모음입니다. 알아요
i
나머지는 확실하지 않은 경우를 의미합니다.
코드는 확장 된 정규식입니다. 그것은 당신이 당신의 regexes에 공백과 댓글을 넣을 수있게합니다. Perldoc을 참조하십시오 Perlre 그리고 Perlretut. 그렇지 않으면 정상처럼.
같은.
- 캐릭터입니다 Regex 수정 자.