regex - 如何使用 Perl 有选择地修改 HTML 文档中脚本标记的 src 属性?

标签 regex perl html-parsing html-parser

我需要在 Perl 中编写一个正则表达式,为所有 src 添加前缀 [perl]texthere[/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>

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

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

关于regex - 如何使用 Perl 有选择地修改 HTML 文档中脚本标记的 src 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11252314/

相关文章:

python - 从 Pandas 系列中提取体积信息 - Pandas , Regex

前八个字母和最后一个数字的正则表达式

c# - 如何用另一个字符串拆分字符串

perl - 在 perl 中处理嵌套分隔符

perl - perl -i *really* 是如何实现的?

c# - AngleSharp 文本元素解析

php - 基于输入的正则表达式创建

perl - 多路复用回调

java - 使用 JTidy 从 html 中删除所需的标签

xpath 查找不包含子节点的节点