我需要寫在Perl的正則表達式將前綴[Perl的] texthere [/ perl的],像這樣所有索馬里紅新月會:如何使用Perl有選擇地修改HTML文檔中腳本標記的src屬性?
<script src="[perl]texthere[/perl]/text"></script>
任何幫助嗎?謝謝!
我需要寫在Perl的正則表達式將前綴[Perl的] texthere [/ perl的],像這樣所有索馬里紅新月會:如何使用Perl有選擇地修改HTML文檔中腳本標記的src屬性?
<script src="[perl]texthere[/perl]/text"></script>
任何幫助嗎?謝謝!
使用負先行模式(在下面的第三行):
s{
(<script\s+src\s*=\s*[\'"])
(?!https?://)
}{$1\[perl]texthere[/perl]}gsx;
打我給它。 +1 – BlackVegetable
對不起,我是新手。如果我在BBedit中使用查找和替換,查找和替換字段中會出現什麼內容? – eggplantkiller
答案中提供的語法表示爲{FIND} {REPLACE}'。只需嘗試一些變體。如果它允許* lookaround *聲明,你可以在替換部分中查找'(?<= src =)(?!「https?)'和'[perl] texthere [/ perl]',否則,我們會看到... –
我能夠匹配任何SRC =」除了HTTP通過:^<script src="(?!(https:)).*$
讓我知道,如果有任何問題,我「會解決它
使用嘗試:。this website作爲一個正則表達式的教程和this website測試正則表達式
使用合適解析器如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>
這應該工作:
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://stackoverflow.com/questions/11247071的可能的複製由13秒 – dgw