使用HTML :: TreeBuilder提取不属于标记的正文中的Text

时间:2013-02-08 17:40:54

标签: perl html-tree

我有一些丑陋的HTML,通过电子邮件发送到我的程序,看起来像:

<html>
    <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    </head>
    <body>
        Saved search results.<br>
    <br>
    Name: 'Some splunk search' <br>
    Query Terms: 'tag=foo NOT BAR=\&quot;Boom\&quot;' <br>
    Link to results: <a href="https://foo/search/blahblahblah">
    https://foo/search/blahblahblah</a>
    <br>
    <br>
    <table border="1">

...为了简洁而剪掉其余部分。

我可以使用HTML :: TreeBuilder拉出表格元素,但无法弄清楚如何使用 拉出&#34;姓名:&#34; &#34;查询条款&#34;从上到下,不采取其他手段。

以上的$ root-&gt;转储如下:

<html> @0
  <head> @0.0
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> @0.0.0
  <body> @0.1
  <p> @0.1.0 (IMPLICIT)
     " Saved search results. "
     <br /> @0.1.0.1
     <br /> @0.1.0.2
     " Name: 'Some splunk search' "
     <br /> @0.1.0.4
     " Query Terms: 'tag=foo NOT BAR=\"Boom\""

那么有没有办法在@ 0.1.0.2和@ 0.1.0.4

之间获取裸文本

谢谢! 托德

1 个答案:

答案 0 :(得分:0)

如果文本有模式,则可能更容易使用HTML解析和正则表达式的组合。

my $body_text = $body->as_text(skip_dels => 1);

my ($name) = ($body_text =~ m#Name: '([^']+)'#s);
my ($query_terms) = ($body_text =~ m#Query Terms: '([^']+)'#s);