2011-04-13 26 views

回答

2
use warnings; 
use strict; 

my $html = '<SELECT>foo</SELECT> bar'; 
$html =~ s{(</SELECT>).*}{$1}; 
print "$html\n"; 

__END__ 

<SELECT>foo</SELECT> 

您還應該考慮使用CPAN上的許多HTML解析器之一。

+0

嗨@toolic,你的回答幫了我,我可以問你關於這個功能的鏈接/教程嗎?謝謝! – catzilla 2015-04-16 09:33:26

+1

@catzilla:您的命令行(或聯機)提供的Perl文檔:'perldoc perlop'和'perldoc perlre' – toolic 2015-04-16 12:25:30

2
$html =~ s#</SELECT>.*$#</SELECT>#; 

你或許可以把它寫不</SELECT>替換字符串之中,但恕我直言這將是的可讀性。

請注意到s ///替代可以一邊使用其它字符從/作爲分隔符,在這種情況下,我選擇使用#,因爲你的正則表達式中包含正斜槓字符,否則必須進行轉義使正則表達式少可讀

+0

如果$ html字符串包含多行,那麼上面的正則表達式只會匹配'',如果它在第一行。您需要添加's'修飾符以將字符串視爲單行。 ##。* $# #s;' – 2011-04-13 21:26:19

+0

@Sam - 我不確定OP是否意味着行獨立或不行...如果行獨立。你確實是對的。 – DVK 2011-04-14 14:56:48

1

當刀(找固定的字符串)就足夠了,不要使用正則表達式(電鋸):

my $html = 'use dom to work with </SELECT> html!'; 
my $cut = '</SELECT>'; 
printf "|%s|\n", substr($html, index($html, $cut) + length($cut)); 
==> 
| html!| 
0

如果你想你可以使用一個第一</SELECT>前站的文本正則表達式是這樣的:

$html =~ /(.*?<\/SELECT>)/; 
my $required_text = $1; 

或在一個步驟:

my ($required_text) = $html =~ /(.*?<\/SELECT>)/; 

它使用非格力dy修飾符?,我認爲是你需要的。
或更好的substr()子例程像上一個答案說。

相關問題