次のように、すべてのsrcの前に[perl] texthere[/perl]を付ける正規表現をPerlで作成する必要があります。
<script src="[perl]texthere[/perl]/text"></script>
何か助けはありますか?ありがとう!
次のように、すべてのsrcの前に[perl] texthere[/perl]を付ける正規表現をPerlで作成する必要があります。
<script src="[perl]texthere[/perl]/text"></script>
何か助けはありますか?ありがとう!
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>
否定先読みパターンを使用します (下の 3 行目)。
s{
(<script\s+src\s*=\s*[\'"])
(?!https?://)
}{$1\[perl]texthere[/perl]}gsx;
これはうまくいくはずです:
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
http を除くすべての src=" に一致させることができ^<script src="(?!(https:)).*$
ます。問題がある場合はお知らせください。修正します。
使用してみてください:この Web サイトを正規表現のチュートリアルとして、この Web サイトを正規表現のテストに使用してください。