从HTML获取短语数字,在短语之后给定数量的字符



基本上,我在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="(.*?)"/
}

最新更新