我需要解析一个HTML文件,我有这样的东西:
<TAG1>
<TAG1>
TEXT_TO_FIND
KEY
<TAG1>
</TAG1>
<TAG1>
</TAG1>
</TAG1>
</TAG1>
考虑到有多个级别的anidation。如何获取文本TEXT_TO_FIND?
用简单的英语,我需要做的是在“最后有文本KEY之后”和“文本KEY”之间获取文本,文本只出现在文档上。
注1:我发现了question,但它似乎没有用;我一直得到一个空洞的结果。这将是表达式:
/<TAG1>(?!.*<TAG1>)(.*)KEY/ism
注意2:如果我从前一个音符的表达式中删除了KEY,我会从文件的最后一个到结尾处获得文本。
提前感谢大家!
答案 0 :(得分:1)
你好!我需要解析一个HTML文件,我有这样的东西:
然后你需要一个HTML解析器。正则表达式不够强大,无法正确执行。
一旦解析了HTML并获得了每个TAG
的内容,就可以使用以下内容:
/(.*)KEY/is
检查文本是否包含KEY
,如果是,请抓取其前面的内容。
答案 1 :(得分:0)
如果您只是不想使用HTML解析器,那么这是一个正则表达式,如果TEXT_TO_FIND不包含“&lt;”或“&gt;”:
/\s*([^<>]*?)\s*?KEY/ism
答案 2 :(得分:0)
在适当的上下文中使用每个工具:使用HTML解析器查找文本块,然后匹配具有正则表达式的文本块。
#! /usr/bin/perl
use warnings;
use strict;
use HTML::Parser;
my $p = HTML::Parser->new(
api_version => 3,
text_h => [
sub {
local($_) = @_;
print $1, "\n" if /(\S.+?)\s*\bKEY\b/s;
},
"dtext"
],
);
# for demo only
*ARGV = *DATA;
undef $/;
$p->parse(<>);
__DATA__
<TAG1>
<TAG1>
TEXT_TO_FIND
KEY
<TAG1>
</TAG1>
<TAG1>
</TAG1>
</TAG1>
</TAG1>
输出:
$ ./find-text TEXT_TO_FIND