【问题标题】:How to replace '?' delimiting with white space delimiting in string如何替换“?”在字符串中用空格分隔
【发布时间】:2014-05-02 13:09:19
【问题描述】:

我正在使用来自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 字符串没有任何作用!我在这里做错了什么?谢谢!

【问题讨论】:

  • use Data::Dumper; { local $Data::Dumper::Useqq = 1; print(Dumper($name)); }的输出是什么
  • 我猜?s 可能是由于编码问题,检查您的输入/输出和终端查看器都设置为utf8。
  • @user3396385 这是一个长镜头,但是当您print $name 时,您是在使用您的块中的变量$name,还是在您的块之外使用不同的$name 变量?
  • 刚刚检查了这个,我认为你是对的。问号出现在输出字符串中的地方有一些奇怪的字符。我会试试你的建议,看看是否有效!
  • @user3396385 use utf8 修复它:) ?

标签: regex perl www-mechanize


【解决方案1】:

每个 ikegami,在评论线程中:

原因是?显示的是编码问题,而不是因为您实际上有一个?。所以首先要做的是找出你实际拥有的东西。所以我再次问, use Data::Dumper; 的输出是什么? { 本地 $Data::Dumper::Useqq = 1;打印(翻斗车($name)); }。

我得到 '\240' 的 ?字符。再次尝试使用 'quotemeta "\240";'这样就解决了问题!

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多