我想要比较这两个变量。它们都具有相同的值,但是,一个是href变量 - 意思是,它是从这样的文件中读取的
<a href=http://google.com>Variable</a>
它是这样的,但在浏览器中显示为锚标记,所以当我使用print "$collect_zids{$key} --> $temp";
比较值时,我在浏览器中看到
变量 - &gt;的 Variable
How it appears in the browser. One text another link.
我假设这两个值不同,因此该代码无法运行
if($collect_zids{$key} eq $from_picture){
print "<h1>Hello</h1>";
}
有没有办法可以将href变量转换为普通的标量变量,以便我可以比较它们?
谢谢!
P.S。我认为Javascript可能是唯一的方式,但是,我没有任何经验。
答案 0 :(得分:2)
没有“href变量”这样的东西。你有两个标量变量。一个包含纯文本,另一个包含HTML。您的任务是从HTML变量中提取HTML <a>
标记内的文本,并将该文本与纯文本变量中的文本进行比较。
这样做的一种方法是从HTML变量中删除HTML。
my $html = '<a href=http://google.com>Variable</a>';
my $text = 'Variable';
$html =~ s/<.+?>//g;
if ($html eq $text) {
say "Equal";
} else {
say "Not Equal [$html/$text]";
}
但不能强调的是,使用正则表达式解析HTML非常脆弱,并且保证在许多情况下不起作用。使用真正的HTML解析器要好得多。 HTML::Strip是为了这个目的而制作的。
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use HTML::Strip;
my $html = '<a href=http://google.com>Variable</a>';
my $text = 'Variable';
my $parser = HTML::Strip->new;
$html = $parser->parse($html);
if ($html eq $text) {
say "Equal";
} else {
say "Not Equal [$html/$text]";
}
值得指出的是,这已在Perl FAQ
中得到解答如何从字符串中删除HTML?
使用HTML :: Strip或HTML :: FormatText,它不仅可以删除HTML,而且还可以删除HTML 还尝试对结果平原进行一些简单的格式化 文本。
更新:在评论中,您说
我无法使用这些方法,因为我没有明确定义变量。
显然不是这样。如何初始化变量对于如何使用变量没有任何影响。
我假设您的HTML文本位于变量$from_picture
中,因此您将使用以下代码删除HTML:
my $parser = HTML::Strip->new;
my $stripped = $parser->parse($from_picture);
if($collect_zids{$key} eq $stripped){
print "<h1>Hello</h1>";
}
我不知道你在哪里想到你不能使用我的解决方案,因为我直接初始化变量,你从文件中读取数据。编程的一项重要技能是能够查看复杂情况并提取相关细节。看来你需要在这个领域做更多的工作: - )
答案 1 :(得分:0)
我使用Perl模块HTML::FormatText;
use HTML::FormatText;
my $formatter = HTML::FormatText->new();
my $string = HTML::FormatText->format_file("path_to_the_file"); #$string variable to hold the result and the path must be for a file.
使用HTML::FormatText
模块后,我能够获取正在读取的原始字符串,而不是将其解释为HTML。所以,我收到的是<a href=http://google.com>Variable</a>
,而不仅仅是Variable
。获取原始字符串后,我可以使用正则表达式来提取我需要的部分。