我无法访问任何模块,如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。
为了彻底起见,我不确定在换行前是否有一两个空格,所以我需要一些可以解释任何字符,空格或线条变化的内容。
答案 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