如何从字符串变量中删除最后一个字符?

时间:2018-05-12 13:00:02

标签: regex perl

我正在尝试将所有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"

打印时如何摆脱双引号"

1 个答案:

答案 0 :(得分:3)

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

首先,您可以为模式使用不同的分隔符,而不是转义所有斜杠。 /.../m/.../相同,但如果您使用m(对于"匹配"),则可以选择不同的分隔符。在这里,我使用了惊叹号!

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

此测试应该有效

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

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

my $capture = $2;
chop $capture;