Perl String在模式之后删除它的一部分

时间:2011-04-13 20:02:48

标签: regex perl

我有一个变量my $html,它包含一个字符串值。我希望在“

”之后删除它
</SELECT>

我如何使用Perl做到这一点?

4 个答案:

答案 0 :(得分:3)

use warnings;
use strict;

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

__END__

<SELECT>foo</SELECT>

您还应该考虑在CPAN上使用众多HTML解析器之一。

答案 1 :(得分:2)

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

你可以在没有</SELECT>替换字符串的情况下编写它,但恕我直言,它的可读性会降低。

请注意,s ///替换可以使用除/之外的其他字符作为分隔符,在这种情况下,我选择使用#,因为正则表达式包含正斜杠字符,否则会有被转义使正则表达式不那么可读

答案 2 :(得分:1)

当刀(寻找固定弦)足够时,不要使用正则表达式(电锯):

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

答案 3 :(得分:0)

如果你想获得第一个</SELECT>之前的文本,你可以使用这样的正则表达式:

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

或一步到位:

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

它使用我认为你需要的非贪婪修饰符? 或者更好的是substr()子程序,就像上一个答案所说的那样。