Perl:在HTML中检测换行符

时间:2016-04-28 18:36:48

标签: regex perl

我无法访问任何模块,如MoJo,但需要捕获两个H3标记之间的所有内容。不幸的是,在某些页面上,H3标签有新行/回车(不知道我怎么知道哪一个),而有些则没有。我需要一些正则表达式捕获。以下是我需要捕获的两种方案的源代码:

第一个场景

<h3>Summary</h3>
<h3>Solution</h3>

第二个场景

<h3>Summary
</h3>
<h3>Solution
</h3>

我当前的代码看起来像这样:

if ($doc =~ m{<h3>Summary(?s:.)</h3>(.+?)<h3>Solution(?s:.)</h3>}si)
{
    my $summaryp = $1;
    $summaryp =~ s{<.+?>}{}gsi;
...
}

我在\ n,\ n \ n,(。+?),\ S \ s等上尝试过多种变体,但没有成功捕获场景#2。

为了彻底起见,我不确定在换行前是否有一两个空格,所以我需要一些可以解释任何字符,空格或线条变化的内容。

1 个答案:

答案 0 :(得分:0)

根据对问题的评论,m{<h3>Summary.*?</h3>(.*?)<h3>Solution.*?</h3>}si应该做所需的事情。

以下是我测试的完整示例:

use warnings;
use strict;

my $doc1 = <<EOF;
<h3>Summary
</h3>
blah 1
this is some stuff
<h3>Solution
</h3>
EOF

my $doc2 = <<EOF2;
<h3>Summary</h3>
blah 2
this is more stuff
<h3>Solution</h3>
EOF2

for my $doc ($doc1, $doc2){
    if ($doc =~ m{<h3>Summary.*?</h3>(.*?)<h3>Solution.*?</h3>}si){
        print "$1\n";
    }
}

输出:

blah 1
this is some stuff


blah 2
this is more stuff