-1

私はこのテキストから一致させようとしています:

<a href="http://english317.ning.com/profiles/blogs/bad-business-writing-487">Continue</a>
                                      </div>
                <p class="small">

                                                    Added by <a href="/profile/KemberleyRamirez">Kemberley Ramirez</a> on September 2, 2010 at 11:38pm   

/ blogsの後にテキスト(例: "bad-business-writing-487")を取得し、文字列(学生名と送信日)で追加したい(例: "Kemberley Ramirez on September 2、2010 at 11:38 pm ")

私はPerl式でUltraEditを使用しています。

4

4 に答える 4

3

何を一致させようとしているのか正確にはわかりませんが、適切な HTML パーサーを使用することをお勧めします。

#!/usr/bin/perl

use strict; use warnings;

use HTML::TokeParser::Simple;

my $parser = HTML::TokeParser::Simple->new(\*DATA);

my $blog_re = qr{^http://english317.ning.com/profiles/blogs/(.+)\z};
my $profile_re = qr{^/profile/(\w+)\z};

while ( my $tag = $parser->get_tag('a') ) {
    next unless my ($href) = $tag->get_attr('href');
    if ( $href =~ $blog_re or $href =~ $profile_re ) {
        print "[$1]\n";
    }
}

__DATA__
<a href="http://english317.ning.com/profiles/blogs/bad-business-writing-487">Continue</a>
                                      </div>
                <p class="small">

                                                    Added by <a href="/profile/KemberleyRamirez">Kemberley Ramirez</a> on September 2, 2010 at 11:38pm
于 2010-09-03T15:51:13.000 に答える
0

「ドットが改行に一致する」モードでPowerGrepを使用して、私はこれを思いついた:

(?>profiles/blogs/(.*?)").*?added by(.*?)</a>(.*?2010.*?\d{2}[ap]m)

(そして追加の処理検索) <?a。*?>

于 2010-09-05T06:46:01.947 に答える
-1

/s および /m 修飾子は、複数行の処理方法を制御します。perlretutを参照してください

/s 修飾子を付けた rrr reg.exps のようなもの、または次のようなものが必要になるでしょう: (未テスト)

$foo =~ m|blogs/([^"]+).*Added by <[^>]+>([^<]+)</a>|s

m|| の使用 // の代わりに、すべてのエスケープを回避します ..

于 2010-09-03T09:18:41.443 に答える
-2

以下は、複数の行で機能するはずです。

.*blogs\/(\S+)".*\(\n.*\)*<a.*>(.*)<\/a>(.*)
于 2010-09-03T10:19:14.567 に答える