用什么简单的Perl脚本来解析带有自定义标记的HTML文档(Perl解释器)?

用什么简单的Perl脚本来解析带有自定义标记的HTML文档(Perl解释器)?,perl,html-parser,Perl,Html Parser,好的,这就是我正在做的。我正在为以自定义扩展名(.cpm)结尾的文档制作一个perl解释器。我环顾四周,发现 看来这是一条路要走。我所要求的是一个简单的教程来解析带有特殊标记的文档。例如,我想要一个演示如何解析HTML文档的东西,但是每当遇到时,它就会用替换它 我想要的一个例子- 这是HTML语言 说“这是利亚姆语” 使用解析的重要部分是为正确的处理程序分配正确的argspec。示例程序: #!/usr/bin/env perl use strict; use warnings;

好的,这就是我正在做的。我正在为以自定义扩展名(.cpm)结尾的文档制作一个perl解释器。我环顾四周,发现

看来这是一条路要走。我所要求的是一个简单的教程来解析带有特殊标记的文档。例如,我想要一个演示如何解析HTML文档的东西,但是每当遇到
时,它就会用
替换它

我想要的一个例子-


这是HTML语言

说“这是利亚姆语”


使用解析的重要部分是为正确的
处理程序
分配正确的
argspec
。示例程序:

#!/usr/bin/env perl

use strict;
use warnings;

use HTML::Parser;

my $html;
sub replace_tagname {
    my ( $tagname, $event ) = @_;

    if ( $tagname eq 'liamslanguage' ) {
        $tagname = 'b';
    }

    if ( $event eq 'start' ) {
        $html .= "<$tagname>";
    }
    elsif ( $event eq 'end' ) {
        $html .= "</$tagname>";
    }
}

my $p = HTML::Parser->new(
    'api_version' => 3,
    'start_h'     => [ \&replace_tagname,      'tagname, event' ],
    'default_h'   => [ sub { $html .= shift }, 'text'           ],
    'end_h'       => [ \&replace_tagname,      'tagname, event' ],
);
$p->parse( do { local $/; <DATA> } );
$p->eof();

print $html;

__DATA__
<html>
This is HTML talking
<liamslanguage>say "This is Liams language speaking"</liamslanguage>
</html>
#/usr/bin/env perl
严格使用;
使用警告;
使用HTML::解析器;
我的$html;
子替换标记名{
我的($tagname,$event)=@;
if($tagname eq'liamslanguage'){
$tagname='b';
}
如果($event eq‘start’){
$html.=”;
}
elsif($event eq‘end’){
$html.=”;
}
}
my$p=HTML::解析器->新建(
“api_版本”=>3,
'start\u h'=>[\&replace\u标记名,'标记名,事件'],
'default_h'=>[sub{$html.=shift},'text'],
'end\u h'=>[\&replace\u标记名,'tagname,event'],
);
$p->parse(do{local$/;});
$p->eof();
打印$html;
__资料__
这是HTML语言
说“这是Liams的语言”

您想解析的html示例如何?非常感谢。这是非常有用和有益的。竖起大拇指!哦,还有一个问题。如何获取标记之间的数据?Liam E-p:对开始处理程序和结束处理程序使用不同的回调。在启动处理程序中,设置一个标志,以便知道标记已启动。在默认处理程序的回调中,检查是否已设置该标志。如果是,则文本位于标记之间。在结束处理程序中,重置标志。也许还有别的办法。请阅读文档。利亚姆E-p:我已经更新了代码,以便它能够处理结束标记。不知怎的,我忽略了它。谢谢,它工作得很好。我首先使用一个.htaccess文件来使用这个脚本来处理.cpm文件。然后使用“$ENV{'PATH_TRANSLATED'};”我可以找到引用的文件并打开它。然后我用这个脚本解析它。