首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配一个字符串,并在perl中获取它旁边的单词

匹配一个字符串,并在perl中获取它旁边的单词
EN

Stack Overflow用户
提问于 2012-09-26 21:03:54
回答 2查看 127关注 0票数 1

我有一个html文件"statistics.htm“。将html文件中的数据转换为一个变量。

假设在变量中,我有以下数据:

代码语言:javascript
复制
<ul class="chart-legend">
    <li class="label-1">
      <div><em></em>FTP<br>
      0 B</div>
    </li>
    <li class="label-2">
      <div><em></em>HTTP<br>
      589 KB</div>
    </li>
    <li class="label-3">
      <div><em></em>POP3/IMAP<br>
      0 B</div>
    </li>
    <li class="label-4">
      <div><em></em>SMTP<br>
      0 B</div>
    </li>
</ul>

假设客户给出FTP作为参数,我想要FTP值,在上面的情况下是0 B。

我如何才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-26 21:36:43

您可以非常简单地使用HTML::TreeBuilder::XPath (好的,非常简单,直到您看到有趣的XPath查询!):

代码语言:javascript
复制
#!/usr/bin/perl

use strict;
use warnings;

use HTML::TreeBuilder::XPath;

my $html= HTML::TreeBuilder::XPath->new->parse_file( \*DATA);
my $ftp= $html->findnodes( 'normalize-space( //div/br[./preceding-sibling::text()="FTP"]/following-sibling::text())');
print "$ftp\n";


__DATA__
<ul class="chart-legend">
    <li class="label-1">
      <div><em></em>FTP<br>
      0 Ba</div>
    </li>
    <li class="label-2">
      <div><em></em>HTTP<br>
      589 KB</div>
    </li>
    <li class="label-3">
      <div><em></em>POP3/IMAP<br>
      0 Bb</div>
    </li>
    <li class="label-4">
      <div><em></em>SMTP<br>
      0 Bc</div>
    </li>
</ul>

XPath表达式:在之前同级文本为'FTB'div中查找br (您可能希望规范化其中的空格)。然后获取下一个同级文本。将其包装在normalize-space中以清理结果,瞧!

票数 1
EN

Stack Overflow用户

发布于 2012-09-26 21:10:29

有几个Perl模块可以为您解析HTML。我建议你尝试其中一个,然后问一个具体的问题,如果你有任何问题。

许多关于这方面的信息都可以在SO和网络上找到。这里有一个示例问题,它将为您提供一些可用的模块:How to parse between and easily in Perl

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12602388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档