首页 > 解决方案 > 如何从字符串变量中删除最后一个字符?

问题描述

例如,我正在尝试将 Google Play 的所有类别放入单独的链接中https://play.google.com/store/apps/category/ART_AND_DESIGN

这是我想出的代码

use LWP::Simple;

$url     = 'https://play.google.com';
my $html = get($url);

while ( $html =~ /href\=\"(\/store\/apps\/category\/)([A-Z]+"|[A-Z]+_[A-Z]+"|[A-Z]+_[A-Z]+_[A-Z]+")/g ) {

    print "$url$1$2\n";
}

问题是$2最后也给了我引号,例如https://play.google.com/store/apps/category/ART_AND_DESIGN"

"打印时 如何去掉双引号?

标签: regexperl

解决方案


好的,您确实应该使用适当的模块处理 HTML,但我将解释问题

首先,您可以为模式使用不同的分隔符,而不是转义所有这些斜杠。/.../与 相同m/.../,但如果您使用m(for "match") 那么您可以选择不同的分隔符。这里我用了感叹号!

其次,在第二次捕获中添加结束双引号,或者给出零、一个或两个下划线的所有替代项没有什么意义。元\w字符匹配“单词”字符,与[0-9A-Za-z_]字母数字或下划线相同。你只需要匹配尽可能多的那些

这个测试应该有效

$html =~  m!href="(/store/apps/category/)(\w+)!g

为了回答您最初的问题,该chop函数删除了字符串的最后一个字符。它不起作用,$2因为该值是只读的,因此您需要声明自己的变量并首先复制它

my $capture = $2;
chop $capture;

推荐阅读