如何使用Perl正则表达式从HTML文件中提取信息?

typ*_*er2 0 html regex xml perl

我有两个文件,XML和HTML,需要从某些模式中提取数据.

我的XML文件格式很好,我可以使用readline读取一行并在标签之间搜索数据.

if($line =~ /\<tag1\>$varvalue\<\/tag1\>/)`
Run Code Online (Sandbox Code Playgroud)

但是,对于我的HTML,它有一个我见过的最糟糕的代码,文件是这样的:

<div class="theater">
    <h2>
    <a href="/showtimes/university-village-3" >**University Village 3**</a></h2>
    <div class="address">
        <i>**3323 South Hoover Street, Los Angeles CA 90007 | (213) 748-6321**</i>
    </div>
</div>

<div class="mtitle">
    <a href="/movie/dream-house-2011"  title="Dream House" onmouseover="mB(event, 771204354);"  >**Dream House**</a>
    <span>**(PG-13 , 1 hr. 31 min.)**</span>
</div>

<div class="times">

    **1:00 PM,**
</div>
Run Code Online (Sandbox Code Playgroud)

现在从这个文件我需要选择以粗体显示的数据.

我可以使用Perl正则表达式来搜索此文件中的数据.

Fai*_*Dev 6

除了XHTML自包含标记之外,RegEx匹配开放标记

http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html

使用正则表达式解析HTML:为什么不呢?

当你读完那些回来:)

编辑:并实际解决您的问题看看这个模块:

http://perlmeme.org/tutorials/html_parser.html

一些示例来解析一个html文件:

#!/usr/local/bin/perl

use HTML::TreeBuilder;

$tree = HTML::TreeBuilder->new;
$tree->parse_file('C:\Users\Stefanos\workspace\HTML_Parser_Test\test.html');

@divs = $tree->find('div');

$tree->delete;
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我只使用你的标签作为.html文件的主体.div存储在@divs数组中.因为我不知道你想找哪个文本,因为**不是一个元素我无法帮你进一步..

PS我从来没有使用过这个模块,但我只是在5分钟内完成了它,因此解析html文件并找到你想要的东西并不是那么难.

正则表达式匹配任何特定标签和内容存储结果为$ 1:

if ($subject =~ m!<tagname[^>]*>(.*?)</tagname>!s) {
    # Successful match
}
Run Code Online (Sandbox Code Playgroud)

虽然当你有嵌套元素时,你很快就会意识到这种方法的局限性.

用实际标签替换标记名.例如在你的情况下我,a,span,div虽然对于div你也会得到第一个div的内容,这不是你想要的..

  • @type - 您是否与老板交谈并解释说**您永远不应该使用正则表达式解析HTML(这是一种非常规语法)?如果你使用一个经过良好测试的库,你会得到正确的,而如果你编写自己的半解析器,它很可能包含错误(它会信任我),并且调试成本极高复杂的RegEx? (3认同)