Perl Regx, выберите слово после слова Connect - PullRequest
0 голосов
/ 24 марта 2011

Это мой журнал

connect
called
menu
transfer
disconnect
connect
called
transfer
disconnect

Я хочу выбрать слово, когда слово точно рядом, Когда слово, как

connect

передача меню отключитьзначит,

я должен выбрать слово перевод ,

, если мой поток, такой как

connect, называется передачей, отключается

тогда яхочу выбрать слово перевод ,

Ответы [ 3 ]

2 голосов
/ 24 марта 2011

Вы можете попробовать что-то вроде:

Обновлено до стандартного дистрибутива Perl:

#!/usr/bin/perl
use strict;
use warnings;

my $count = 0;
while(<DATA>) {
    chomp;
    $count = 1 if $_ eq 'connect';
    if ($count == 3) {
        print "2 words after is : $_\n";
        $count = 0;
    }
    $count++ if $count;
}


__DATA__
connect
called
menu
transfer
disconnect
connect
called
transfer
disconnect

Выход:

2 words after is : menu
2 words after is : transfer
1 голос
/ 24 марта 2011

Использование регулярного выражения для решения этой проблемы предполагает, что у вас есть файл журнала в одной переменной.При условии, что ваш файл журнала не очень большой, вы можете сделать это следующим образом:

use File::Slurp qw(slurp);
my $log = slurp('path/to/logfile');

Или, если вы предпочитаете не использовать нестандартный модуль Perl для этого:

{
  local $/;
  open my $fh, '<', 'path/to/logfile' or die $!;
  my $log = <$fh>;
  close $fh;
}

Чтобы получить случаи, когда слово после передачи соответствует слову «connect», но только там, где поток menu -> transfer -> ..., вы можете сделать следующее:

while ( $log =~ m{menu\s+transfer\s+(\w*connect\w*)}g ) {
    print "transfer -> $1\n";
}
0 голосов
/ 24 марта 2011

Зачем вам использовать Regex?Это не хороший вариант использования.Просто

while (<>) { chomp; last if ($_ eq 'connect'); }
$_ = <>;
print;

сделает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...