2011-09-15 55 views
-1

我的一個正則表達式有一個小問題。 我的數據字段設置如下:Perl正則表達式字段分隔符

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

我的正則表達式是

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

我來了對面的問題是,正則表達式僅每隔一列匹配。如果正則表達式開始在匹配模式的最後應用而不是在組定義之後應用,那麼這是有意義的 - 在到達第二列之前,沒有三個空格要匹配。

我該如何做到這一點?我的google-fu讓我失望。

+0

「與其他列匹配」是什麼意思? – NullUserException

+0

正則表達式匹配第一列,然後是第三,第五等。 –

回答

4

你應該在正則表達式

/(?<=\s\s\s)(.*?)(?=\s\s\s)/ 
1

使用look-around assertions你不應該使用split(/\s\s\s/, $line)

+0

儘管它是一個Perl兼容的正則表達式,我不能使用拆分 - 它的輸入被送入另一個程序。我希望這很簡單。 –

+0

如果你不能使用Perl,那麼你不應該用Perl標記你的問題!你也不應該把「Perl」放在主題中。你已經要求一個Perl解決方案,然後拒絕解決方案,因爲它在Perl中。驚奇! – tadmc

2

也許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.' 
     ]; 

雖然其確實建立了領先的元素。

+0

如果必須的話,您可以去掉前後空格。 – Andrey