2012-12-03 2 views
0

와 3에 선]을 분할 :
[Fri Oct 5 09:11 2012] 0.005 [ext2/1/rel 322 (0,50)] [abc] I'm Sure [he/she] is leading CORN @types (countyfair)펄 내가이 라인이 정규식

을 어떻게 3]에서 분할하고이 개 부분이 수행

[Fri Oct 5 09:11 2012] 0.005 [ext2/1/rel 322 (0,50)] [abc]  

I'm Sure [he/she] is leading CORN @types (countyfair) 
+1

는 그 라인에']'** 마지막 ** 보장인가? –

+2

@ m.buettner- 보증하지 않습니다. 업데이트 – mamesaye

답변

4

이 하나는 세 개를 건너 뜁니다. :

,
use strict; 
use warnings; 

while (<>) { 
    if (my ($p1, $p2) = (/([^]]+][^]]+][^]]+])\s*(.*)/)) { 
    print "$p1 : $p2\n"; 
    } 
} 

배열 사용 :

my @a; 
while (<>) { 
    if (@a = (/([^]]+][^]]+][^]]+])\s*(.*)/)) { 
    print join(",", @a), "\n"; 
    } 
} 
+0

을 참조하십시오. 빠른 응답 4 개. 스플릿을 사용할 수 있습니까? 배열로 작업하고 있습니다. – mamesaye

+1

배열을 사용하는 방법을 보여주기 위해 코드를 업데이트하여 분할을 조사했습니다 ... – perreal

+0

감사합니다. – mamesaye

0

나는 일반적인 기능에 관심이있어 그렇게 여기있다 :

#!/usr/bin/env perl 

use strict; 
use warnings; 

my $str = q{[Fri Oct 5 09:11 2012] 0.005 [ext2/1/rel 322 (0,50)] [abc] I'm Sure [he/she] is leading CORN @types (countyfair)}; #'# fix highlight 

my ($first, $second) = split_after_nth(qr/]/, $str, 3); 
$second =~ s/^\s*//; #/# fix highlight 
print "$first\n$second\n"; 

sub split_after_nth { 
    my ($qr, $str, $num) = @_; 
    my @parts = split /($qr)/, $str, ++$num; 
    my $second = pop @parts; 
    my $first = join '', @parts; 
    return ($first, $second); 
} 
1

각각 ]에 의해 종료 세 개의 문자열 A-뒤에 모습 할 것 속임수. 세 번째 ] 이후 공백으로 무엇을하고 싶었는지 언급하지 않았으므로 거기에 놓았습니다.

use strict; 
use warnings; 

my $s = q{[Fri Oct 5 09:11 2012] 0.005 [ext2/1/rel 322 (0,50)] [abc] I'm Sure [he/she] is leading CORN @types (countyfair)}; 
my @pair = split /(?:[^]]*\]){3}\K/, $s; 

print "$_\n" for @pair; 

출력

[Fri Oct 5 09:11 2012] 0.005 [ext2/1/rel 322 (0,50)] [abc] 
I'm Sure [he/she] is leading CORN @types (countyfair)