如何更换'?'用空格分隔字符串分隔

时间:2014-05-02 13:09:20

标签: regex perl www-mechanize

我正在处理来自WWW::Mechanize的一组链接,并且只想打印从页面检索到的链接名称和网址列表。奇怪的是,用$link->name()拉出的名字会以'?'字符返回,其中有空格。我试图使用以下方法解决这个问题:

1)

{
my $name = $link->text();
$name =~ s/\?/" "/g;
}

2)正如其他帖子中所建议的那样,更换'?'字符:

{
my $name = $link->text();
my $pat = quotemeta '?';
$name =~ s/$pat/" "/g;
}

这两种方法对$ name字符串都没有任何作用!我在这做错了什么?谢谢!

1 个答案:

答案 0 :(得分:0)

Per ikegami,评论帖:

原因一个?正在显示的是一个编码问题,不是因为你实际上有一个?所以要做的第一件事就是找出你实际拥有的东西。所以我再次问,使用Data :: Dumper的输出是什么; {local $ Data :: Dumper :: Useqq = 1;打印(自卸车($名)); }。

我得到了' \ 240;为了 ?字符。再次使用' quotemeta" \ 240";'并解决了这个问题!

240八进制是A0 hex,这是NBSP,不是问题。这就是为什么要删除?没有帮助。 s / \ xA0 / / g会有所帮助,但更好的是,让我们为您的终端正确编码字符串。

use open ':std', ':encoding(UTF-8)';