2012-06-28 40 views

回答

1

使用負先行模式(在下面的第三行):

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

打我給它。 +1 – BlackVegetable

+0

對不起,我是新手。如果我在BBedit中使用查找和替換,查找和替換字段中會出現什麼內容? – eggplantkiller

+0

答案中提供的語法表示爲{FIND} {REPLACE}'。只需嘗試一些變體。如果它允許* lookaround *聲明,你可以在替換部分中查找'(?<= src =)(?!「https?)'和'[perl] texthere [/ perl]',否則,我們會看到... –

0

我能夠匹配任何SRC =」除了HTTP通過:^<script src="(?!(https:)).*$ 讓我知道,如果有任何問題,我「會解決它

使用嘗試:。this website作爲一個正則表達式的教程和this website測試正則表達式

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> 

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

<script src="https://websitewebsitewebsite"></script>
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

相關問題