2014-09-05 61 views
0

從一個字符串結束標記我有一個這樣的字符串:刪除開始,在Perl

<script>This String may contain other JS tags in between </script> 

我的要求是刪除開始,並從字符串結尾的腳本標籤,如果字符串之間的一些其它標籤,那些不應該被刪除。

我該如何在Perl中做到這一點?

+5

您是否嘗試過的東西? – Toto 2014-09-05 12:59:56

+0

是的..我嘗試使用http://search.cpan.org/dist/HTML-Strip/Strip.pm 但這會刪除字符串中可能存在的任何其他標記 – ALBI 2014-09-05 13:11:36

+3

[小心解析的風險標籤與正則表達式!](http://stackoverflow.com/q/1732348/2032064) – Mifeet 2014-09-05 13:28:05

回答

0

您可以嘗試下面的代碼來刪除開始和結束腳本標記。

"<script>This String may contain other JS tags in between </script>".replace(/^<script>|<\/script>$/g, ""); 
'This String may contain other JS tags in between ' 

OR

"foo <script>This String may contain other JS tags in between </script> foo".replace(/^((?:(?!<script>).)*)<script>(.*?)<\/script>((?:(?!<script>).)*)$/g, "$1$2$3"); 
'foo This String may contain other JS tags in between foo' 

通過perl的,

$ echo 'foo <script>This String may contain other JS tags in between </script> foo' | perl -pe 's/^((?:(?!<script>).)*)<script>(.*?)<\/script>((?:(?!<script>).)*)$/\1\2\3/g' 
foo This String may contain other JS tags in between foo 
+1

「我怎樣才能在Perl中做到這一點?」 ©ALBI – edem 2014-09-05 13:41:25

+0

@edem添加了perl解決方案.. – 2014-09-06 06:26:54

+0

發表一個示例。 – 2014-09-06 11:19:43

1

在Perl中:

$string =~ s!<script[^>]*>|.*</\s*script>!!g; 
+0

這隻會刪除起始。無論如何,謝謝..我會理解這個表達,並找出原因。謝謝 – ALBI 2014-09-05 13:19:13

+0

如果腳本中的文本包含多行,則可能需要使用修飾符;請參閱http://perldoc.perl.org/perlre.html#Modifiers – 2014-09-05 13:25:00

+1

g - 修飾符將有助於 – edem 2014-09-05 13:43:09

0

在Perl中,你可以做一個測試,以檢查它是否符合您的標籤,然後做替代。

#!/usr/bin/perl 

use warnings; 
use strict; 

my $string = '<script>This String may contain other JS tags in between </script>'; 

if ($string =~ /^(<script>).*(<\/script>)$/) { 
$string =~ s/$1|$2//g; 
} 
print $string, "\n"; 

會打印:

This String may contain other JS tags in between 
+0

$ string =〜s/^(