Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何最好地解析/拆分a<;部门>;基于<;br/>;标签_Perl - Fatal编程技术网

Perl 如何最好地解析/拆分a<;部门>;基于<;br/>;标签

Perl 如何最好地解析/拆分a<;部门>;基于<;br/>;标签,perl,Perl,我有一个包含多行地址的标签,我想将其拆分为单行,以便识别城市、邮政编码等 比如说 <div>Ministry of Magic <br />Whitehall <br />London <br />SW1A 2AA </div> 但是,我很清楚这一点,所以我想我应该尝试使用HTML::TreeBuilder/HTML::Element,但我不确定如何获取内容。我可以向下查找“br”标记,但它只返回标记本身。这并

我有一个包含多行地址的标签,我想将其拆分为单行,以便识别城市、邮政编码等

比如说

<div>Ministry of Magic
    <br />Whitehall
    <br />London
    <br />SW1A 2AA
</div>
但是,我很清楚这一点,所以我想我应该尝试使用
HTML::TreeBuilder/HTML::Element
,但我不确定如何获取内容。我可以向下查找“br”标记,但它只返回

标记本身。这并不奇怪,因为

元素不能包含内容,但我不知道应该使用什么语法

my $tree = HTML::TreeBuilder->new();
my @content = $tree->parse($text)->guts()->look_down(_tag => 'br');
foreach my $line (@content) {
    say $line->as_HTML;
}
显示

<br />
<br />
<br />



因此,我的问题是:1)我应该坚持使用正则表达式还是使用HTML::TreeBuilder,2)如果我应该使用HTML::TreeBuilder,我如何提取我感兴趣的四行文本?

如果您的案例(并且将永远)像您描述的那样简单,那么我会坚持使用正则表达式。在你大喊大叫并向我放狗之前,先想一想:

是的,正则表达式确实不能解析HTML。但我们这里不是在解析HTML。我们正在解析
中一个非常非常小的HTML子集,它很容易由一个简单的正则表达式处理。对我来说,使用一个完整的解析库相当于用大锤敲打核桃


我个人会把你的正则表达式升级到
m捕获(轻微)损坏的HTML,并像其他任何东西一样,使用您可以组合的所有有效和无效输入进行测试。

谢谢@type\u outcast,我的案例就如我所描述的一样简单。我同意你所说的,这就是我所经历的思考过程。我只是想知道是否有更好的方法,也想知道如何处理“br”标记(但我可能会提出一个单独的问题)。a

只是一个换行符,标记中没有其他内容。您需要这些标记之间(即周围)的文本表达式。
my $tree = HTML::TreeBuilder->new();
my @content = $tree->parse($text)->guts()->look_down(_tag => 'br');
foreach my $line (@content) {
    say $line->as_HTML;
}
<br />
<br />
<br />