0

私はこの行を持っています:
[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番目から分割して2つの部分にするにはどうすればよいですか:

[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)   
4

3 に答える 3

4

これは 3 つ]の s をスキップします:

use strict;
use warnings;

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

配列の使用:

my @a; 
while (<>) {
  if (@a = (/([^]]+][^]]+][^]]+])\s*(.*)/)) {
    print join(",", @a), "\n";
  }
}
于 2012-12-03T21:05:03.947 に答える
1

それぞれが で終了する 3 つの文字列を後読みする]と、うまくいきます。3 番目以降の空白で何をしたいかについて言及しなかった]ので、そこに残しました。

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)
于 2012-12-04T13:57:44.573 に答える
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);
}
于 2012-12-04T03:21:31.040 に答える