【发布时间】:2011-04-14 04:21:33
【问题描述】:
我的$html 有一个变量,它包含一个字符串值。我想在单词后面剪掉它
</SELECT>
如何用 Perl 做到这一点?
【问题讨论】:
我的$html 有一个变量,它包含一个字符串值。我想在单词后面剪掉它
</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>#;
您可以在没有</SELECT> 的替换字符串中编写它,但恕我直言,它的可读性会降低。
请注意,s/// 替换可以使用除/ 之外的其他字符作为分隔符,在这种情况下,我选择使用#,因为您的正则表达式包含正斜杠字符,否则必须对其进行转义正则表达式不太可读
【讨论】:
</SELECT>,如果它在第一行。您需要添加 's' 修饰符以将字符串视为单行。 s#</SELECT>.*$#</SELECT>#s;
当刀(寻找固定的绳子)就足够时,不要使用正则表达式(电锯):
my $html = 'use dom to work with </SELECT> html!';
my $cut = '</SELECT>';
printf "|%s|\n", substr( $html, index( $html, $cut ) + length( $cut ) );
==>
| html!|
【讨论】:
如果您想获取位于第一个 </SELECT> 之前的文本,您可以使用这样的正则表达式:
$html =~ /(.*?<\/SELECT>)/;
my $required_text = $1;
或一步到位:
my ($required_text) = $html =~ /(.*?<\/SELECT>)/;
它使用非贪婪修饰符?,我认为这是你需要的。
或者更好的是 substr() 子例程,就像前面的答案所说的那样。
【讨论】: