基本上,我在perl中打开了一个HTML文件,并写下了这一行:
if(INFILE =~ $txt_TeamNumber) {
$teamNumber = $txt_TeamNumber
}
我需要获取txt_teamnumber,向前走21个空间,然后获得下一个1-5个数字。这是我试图从以下内容提取信息的HTML文件的一部分:
<td style="width: 25%;">Team Number:
</td>
<td style="width: 75%;">
<input name="ctl00$ContentPlaceHolder1$txt_TeamNumber" type="text" value="186" maxlength="5" readonly="readonly" id="ctl00_ContentPlaceHolder1_txt_TeamNumber" disabled="disabled" tabindex="1" class="aspNetDisabled" style="width:53px;">
</td>
这是使用准备好的解析器的好处的一个很好的例子。
解析HTML的标准模块之一是html :: treebuilder。它的有效性在很大程度上是基于其对HTML :: element的良好使用,因此请始终准备好参考。
这个问题没有说明HTML来自何处。为了进行测试,我将其放入文件中,用所需的标签包裹,然后从该文件加载它。我希望它来自互联网,请相应地更改。
use warnings;
use strict;
use Path::Tiny;
use HTML::TreeBuilder;
my $file = "snippet.html";
my $html = path($file)->slurp; # or open and slurp by hand
my $tree = HTML::TreeBuilder->new_from_content($html);
my @nodes = $tree->look_down(_tag => 'input');
foreach my $node (@nodes) {
my $val = $node->look_down('name', qr/$txt_TeamNumber/)->attr('value');
print "'value': $valn";
}
这打印了行:'value': 186
。&nbsp;请注意,我们根本不必解析任何东西。
我假设 'name'
属性是由 $txt_TeamNumber
标识的,因此 $
被逃脱了。
代码使用出色的路径:: TINY对slurp
文件。如果安装模块存在问题
有关上述HTML
解析模块的完整实用性,请参见文档和丰富的其他示例。当然还有其他方法和方法,可以准备好由其他良好模块使用。请搜索正确的工具。
我强烈建议保持清晰的,以解析html(或类似的任何东西)。
观看可变范围。您应该能够通过简单的Regexp捕获来获得它:
if(INFILE =~ /$txt_TeamNumber/) {
$teamNumber = /$txt_TeamNumber/
($value) = /$txt_TeamNumber.*?value="(.*?)"/
}