2011-09-06 7 views
1

나는어떻게 백 슬래시 (펄)의 특정 숫자 사이에 어떤 인쇄

//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이 다른와 비슷한 URL을 가지고 있지만이 될 것이다 나는 그것의 같은 부분을 원하는 파일 이름 바로 앞에있는 부분.
나는 마지막과 마지막에 두 번째 사이에서 무엇을 인쇄 할 수있는 백 슬래시의 수를 계산하면 내가 생각 ..

그래서 출력은 내가 지금 무엇을 가지고

This is what I want 7-28 

과 같을 것이다 먼 백 슬래시 수를 계산하지만 필요한 인쇄 방법을 모르겠습니다.

강령 :

my $string = $cells[74]; 
my $count = lc($string) =~ tr/\///; 
print $count; 
+4

내가, Windowsboy을 더 백 슬래시를 볼 수 없습니다. – tchrist

답변

6

사용할 수 있습니다.

#!/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; 
} 
+0

이것은 완벽하게 작동했습니다 ... 나는 이상한 오류로 인해 대신 인쇄물을 사용해야했습니다. 하지만 정규 표현식이 미친 ... –

+0

@David 'v5.10 사용'또는 '사용 기능 qw (말하기)'를 잊어 버리셨습니까? 'say '는 핵심 기능이 아니다. – TLP

2

당신은 그것에 대해 basenamedirname를 사용할 수 있습니다

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)); 
/에 또는

, split 문자열과 사전이 마지막 요소를 가지고.

2

방금 ​​끝에서 시작하여 거꾸로 작동, (사람들은 앞으로 백 슬래시 슬래시되지 않고) 슬래시를 계산 할 필요가 없습니다 split

my @data = split('/', $string); 
print $data[-2]; 
+0

그러면 첫 번째와 두 번째 슬래시 사이에 데이터가 생기고 마지막에서 두 번째 슬래시와 마지막 슬래시 사이에는 데이터가 없습니다. – Quentin

+1

그리고 단일 문자로 분할 할 때 정규 표현식을 사용하는 것은 지저분한 일입니다. – Quentin

+0

@Quentin 대답하기 전에 질문을 완전히 읽어야합니다. – Bruce

0

입력을 배열로 분리하십시오. 질문은 : 원하는 필드를 어떻게 식별 할 수 있습니까? 위치별로?

#!/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__ 
0

당신은 정규 표현식을 사용할 수 있습니다

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 
관련 문제