我怎么能选择性地修改脚本标记的src属性使用Perl的HTML文档中?(How can I sele

2019-09-18 16:42发布

我需要写在Perl的正则表达式将前缀[Perl的] texthere [/ perl的],像这样所有索马里红新月会:

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

任何帮助吗? 谢谢!

Answer 1:

使用合适解析器如HTML :: TokeParser ::简单 :

#!/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>

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

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


Answer 2:

使用负先行图案(下面的第三行):

s{
  (<script\s+src\s*=\s*[\'"])
  (?!https?://)
}{$1\[perl]texthere[/perl]}gsx;


Answer 3:

我能够“通过但除了http:匹配任何SRC = ^<script src="(?!(https:)).*$让我知道,如果有任何问题,我会解决它。

尝试使用: 本网站作为一个正则表达式的教程和这个网站来测试正则表达式。



Answer 4:

这应该工作:

 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



文章来源: How can I selectively modify the src attributes of script tags in an HTML document using Perl?