0

我有一些丑陋的 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 拉出表格元素,但无法弄清楚如何在不诉诸其他方式的情况下从上方拉出“名称:”和“查询条款”。

上面的 $root->dump 看起来像:

<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 之间获取裸文本

谢谢!托德

4

1 回答 1

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);
于 2013-02-08T19:48:32.977 回答