如何打印一定数量的反斜杠之间的内容(Perl)

如何打印一定数量的反斜杠之间的内容(Perl),perl,Perl,我有一个类似的url //google.com/Ucomm/Photos/1984 Digital Photos/blah blah/Reflections Magazine/Fall 1984 issue/This is what I want 7-28/TMI_7840_xx.PNG 每个URL是不同的,但我希望它的相同部分,这将是前面的文件名的权利部分。 我想如果我计算反斜杠的数量,我可以打印出第二到最后一个和最后一个之间的内容 所以输出看起来像 This is what I wa

我有一个类似的url

//google.com/Ucomm/Photos/1984 Digital Photos/blah blah/Reflections Magazine/Fall 1984    issue/This is what I want 7-28/TMI_7840_xx.PNG
每个URL是不同的,但我希望它的相同部分,这将是前面的文件名的权利部分。 我想如果我计算反斜杠的数量,我可以打印出第二到最后一个和最后一个之间的内容

所以输出看起来像

This is what I want 7-28
到目前为止,我已经计算了反斜杠的数量,但我不知道如何打印我需要的内容

守则:

my $string = $cells[74];
my $count = lc($string) =~ tr/\///;
print $count;
您可以使用basename和dirname:

use File::Basename;

my $str="//google.com/Ucomm/Photos/1984 Digital Photos/blah blah/Reflections Magazine/Fall 1984    issue/This is what I want 7-28/TMI_7840_xx.PNG";

print basename(dirname($str));
或者,拆分/上的字符串并获取前一个元素。

您可以使用basename和dirname:

use File::Basename;

my $str="//google.com/Ucomm/Photos/1984 Digital Photos/blah blah/Reflections Magazine/Fall 1984    issue/This is what I want 7-28/TMI_7840_xx.PNG";

print basename(dirname($str));
或者,拆分/上的字符串并获取前一个元素。

您可以使用

你可以用


你不需要计算斜杠的数量,这些是正向斜杠,不是反向斜杠,只需要从末尾开始,然后反向操作

#!/usr/bin/perl

use strict;
use warnings;
use v5.10;

my $string = "//google.com/Ucomm/Photos/1984 Digital Photos/blah blah/Reflections Magazine/Fall 1984    issue/This is what I want 7-28/TMI_7840_xx.PNG";

say "Version 1";
{
        my @parts = split '/', $string;
        say $parts[-2];
}

say "Version 2"; # if you love regular expressions
{
        my ($captured) = $string =~ m!/([^/]+)/[^/]+$!;
        say $captured;
}

你不需要计算斜杠的数量,这些是正向斜杠,不是反向斜杠,只需要从末尾开始,然后反向操作

#!/usr/bin/perl

use strict;
use warnings;
use v5.10;

my $string = "//google.com/Ucomm/Photos/1984 Digital Photos/blah blah/Reflections Magazine/Fall 1984    issue/This is what I want 7-28/TMI_7840_xx.PNG";

say "Version 1";
{
        my @parts = split '/', $string;
        say $parts[-2];
}

say "Version 2"; # if you love regular expressions
{
        my ($captured) = $string =~ m!/([^/]+)/[^/]+$!;
        say $captured;
}

将输入拆分为数组。问题是:如何识别您想要的字段?按位置

    #!/usr/bin/env perl

    use strict;
    use warnings;

    use Data::Dumper;

    # Make Data::Dumper pretty
    $Data::Dumper::Sortkeys = 1;
    $Data::Dumper::Indent   = 1;

    # Set maximum depth for Data::Dumper, zero means unlimited
    local $Data::Dumper::Maxdepth = 0;

    my $string = '//google.com/Ucomm/Photos/1984 Digital Photos/blah blah/Reflections Magazine/Fall 1984    issue/This is what I want 7-28/TMI_7840_xx.PNG';

    my @array = split /\//, $string;
    print Dumper \@array;

__END__

将输入拆分为数组。问题是:如何识别您想要的字段?按位置

    #!/usr/bin/env perl

    use strict;
    use warnings;

    use Data::Dumper;

    # Make Data::Dumper pretty
    $Data::Dumper::Sortkeys = 1;
    $Data::Dumper::Indent   = 1;

    # Set maximum depth for Data::Dumper, zero means unlimited
    local $Data::Dumper::Maxdepth = 0;

    my $string = '//google.com/Ucomm/Photos/1984 Digital Photos/blah blah/Reflections Magazine/Fall 1984    issue/This is what I want 7-28/TMI_7840_xx.PNG';

    my @array = split /\//, $string;
    print Dumper \@array;

__END__

可以使用正则表达式:

if ($str=~/([^\/]*)\/([^\/]*)$/) {
   print "$1\n"
} else {
   print "ERROR\n"
}
例如:

perl -e '$str="google.com/Ucomm/Photos/1984 Digital Photos/blah blah/Reflections Magazine/Fall 1984    issue/This is what I want 7-28/TMI_7840_xx.PNG"; if ($str=~/([^\/]*)\/([^\/]*)$/) {print "$1\n"} else {print "ERROR\n"}'

This is what I want 7-28

可以使用正则表达式:

if ($str=~/([^\/]*)\/([^\/]*)$/) {
   print "$1\n"
} else {
   print "ERROR\n"
}
例如:

perl -e '$str="google.com/Ucomm/Photos/1984 Digital Photos/blah blah/Reflections Magazine/Fall 1984    issue/This is what I want 7-28/TMI_7840_xx.PNG"; if ($str=~/([^\/]*)\/([^\/]*)$/) {print "$1\n"} else {print "ERROR\n"}'

This is what I want 7-28

我看不到反斜杠,窗口男孩。我看不到反斜杠,窗口男孩。这样可以得到第一和第二斜杠之间的数据,不是在倒数第二个斜杠和最后一个斜杠之间。在单个字符上拆分时使用正则表达式非常混乱。拆分始终将第一个参数视为正则表达式,以获取第一个斜杠和第二个斜杠之间的数据,不在倒数第二个斜杠和最后一个斜杠之间。在单个字符上拆分时使用正则表达式非常混乱。拆分始终将第一个参数视为正则表达式这非常有效。。。由于一个奇怪的错误,我不得不使用打印而不是说。。但是正则表达式太疯狂了…@David你忘了使用v5.10或者qwsay功能了吗?say不是一个核心功能。这个功能非常有效。。。由于一个奇怪的错误,我不得不使用打印而不是说。。但是正则表达式太疯狂了…@David你忘了使用v5.10或者qwsay功能了吗?say不是一个核心功能。