Разделители полей регулярных выражений Perl - PullRequest
0 голосов
/ 15 сентября 2011

У меня небольшая проблема с одним из моих регулярных выражений. Мои поля данных настроены следующим образом:

<3 spaces>my first column<3 spaces>my second column<3 spaces>etc. 

Мое регулярное выражение

\s\s\s(.*?)\s\s\s

Проблема, с которой я сталкиваюсь, состоит в том, что регулярное выражение соответствует только каждому другому столбцу. Это имеет смысл, если регулярное выражение начинает применяться в самом конце сопоставляемого шаблона, а не после определения группы - не существует набора из трех пробелов для сопоставления в этой точке, пока не будет достигнут второй столбец.

Как я могу это сделать? Мой гугл-фу подводит меня.

Ответы [ 3 ]

4 голосов
/ 15 сентября 2011

вы должны использовать проверочные утверждения в регулярном выражении

/(?<=\s\s\s)(.*?)(?=\s\s\s)/
2 голосов
/ 15 сентября 2011

Может быть split может помочь:

use warnings;
use strict;
use Data::Dumper;

my $str = '   my first column   my second column   etc.';
my @cols = split /\s{3}/, $str;
print Dumper(\@cols);

__END__

$VAR1 = [
          '',
          'my first column',
          'my second column',
          'etc.'
        ];

Хотя, он создает ведущий элемент.

1 голос
/ 15 сентября 2011

Разве вы не должны использовать split(/\s\s\s/, $line)?

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