2

次のように、すべてのsrcの前に[perl] texthere[/perl]を付ける正規表現をPerlで作成する必要があります。

 <script src="[perl]texthere[/perl]/text"></script> 

何か助けはありますか?ありがとう!

4

4 に答える 4

2

HTML :: TokeParser :: Simple:などの適切なパーサーを使用します。

#!/usr/bin/env perl

use strict; use warnings;
use HTML::TokeParser::Simple;

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

while (my $token = $parser->get_token('script')) {
    if ($token->is_tag('script')
            and defined(my $src = $token->get_attr('src'))) {
            $src =~ m{^https?://}
                or  $token->set_attr('src', "[perl]texthere[/perl]$src");
    }
    print $token->as_is;
}

__DATA__
<script src="/js/text.text.js/"></script>

And at the same time, ignore scrs that begin with http, as such:

 <script src="https://websitewebsitewebsite"></script>

出力:

<script src = "[perl] texthere [/perl]/js/text.text.js/"> </ script>

同時に、httpで始まるscrを無視します。

 <script src = "https:// websitewebsitewebsite"> </ script>
于 2012-06-28T20:40:14.573 に答える
1

否定先読みパターンを使用します (下の 3 行目)。

s{
  (<script\s+src\s*=\s*[\'"])
  (?!https?://)
}{$1\[perl]texthere[/perl]}gsx;
于 2012-06-28T20:33:10.903 に答える
0

これはうまくいくはずです:

 s{(?<=src=)(?!"https?)}{[perl]texthere[/perl]}

テスト:

 my @olnk = ('<script src=/js/text.text.js/"></script>',
             '<script src="https://websitewebsitewebsite"></script>' );
 my @nlnk = map {
                  s{(?<=src=)(?!"https?)}{[perl]texthere[/perl]}; $_
                } @olnk;

結果:

 print join "\n", @nlnk;

 <script src=[perl]texthere[/perl]/js/text.text.js/"></script>
 <script src="https://websitewebsitewebsite"></script>

よろしく

rbo

于 2012-06-28T20:44:17.130 に答える
0

http を除くすべての src=" に一致させることができ^<script src="(?!(https:)).*$ ます。問題がある場合はお知らせください。修正します。

使用してみてください:この Web サイトを正規表現のチュートリアルとして、この Web サイトを正規表現のテストに使用してください。

于 2012-06-28T20:33:23.790 に答える