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正则表达式来搜索此文件中的数据.
http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.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的内容,这不是你想要的..