我有一个变量my $html
,它包含一个字符串值。我希望在“
</SELECT>
我如何使用Perl做到这一点?
答案 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()
子程序,就像上一个答案所说的那样。