问题描述
我有一个变量ѭ0,它包含一个字符串值。我想把这个词删掉
</SELECT>
如何使用Perl做到这一点?
解决方法
use warnings;
use strict;
my $html = \'<SELECT>foo</SELECT> bar\';
$html =~ s{(</SELECT>).*}{$1};
print \"$html\\n\";
__END__
<SELECT>foo</SELECT>
您还应该考虑在CPAN上使用许多HTML解析器之一。
,$html =~ s#</SELECT>.*$#</SELECT>#;
您可能无需在替换字符串中输入“ 4”就可以编写它,但是恕我直言,它的可读性较差。
请注意,s ///替换可以使用除ѭ5side之外的其他字符作为分隔符,在这种情况下,我选择使用#
,因为您的正则表达式包含正斜杠字符,否则必须将其转义,从而使regex的可读性降低
,当一把刀(寻找固定的线)就足够时,不要使用正则表达式(电锯):
my $html = \'use dom to work with </SELECT> html!\';
my $cut = \'</SELECT>\';
printf \"|%s|\\n\",substr( $html,index( $html,$cut ) + length( $cut ) );
==>
| html!|
,如果要获取第一个“ 4”之前的文本,可以使用如下正则表达式:
$html =~ /(.*?<\\/SELECT>)/;
my $required_text = $1;
或一步:
my ($required_text) = $html =~ /(.*?<\\/SELECT>)/;
它使用非贪婪修饰符?
,我认为这是您需要的。
或更像前面的答案所说的substr()
子程序。