は非常に簡単である:
print $_, "\n" for split ' ', 'file1.gz file1.gz file3.gz';
これは実際split
の特別な形態である(この機能は、通常の代わりに、文字列のパターンをとるように)別の特別な場合として
を、split
は、PATTERN
が省略された場合、または 文字列が1つの空白文字で構成されている場合、 コマンドラインツールawk
のデフォルト動作をエミュレートします(例えば、' '
または"\x20"
)。この場合、EXPR
の先頭の空白は、分割が発生する前に削除された であり、/\s+/
の場合は、PATTERN
が として処理されます。特に、これは、隣接するすべての空白(単一の空白文字だけではない)がセパレータとして使用されることを意味します。私は(?<=...)
を使用ここで
my $line = "file1.gzfile1.gzfile3.gz";
my @abc = split /(?<=\.gz)/, $line;
print $_, "\n" for @abc;
:
おそらく、あなたは.gz
延長線上に分割したい:ここ
は、(空白のない単純な文字列で)元の質問のための答えです構成はlook-behind assertionであり、基本的には、行内の各点で分割を行い、その後には.gz
部分文字列が続きます。
あなたは拡張子の固定セットで作業する場合は、あなたがそれらすべてを含めるようにパターンを拡張することができます:それは今あるとして、あなたは、単に少なくとも一つの空白に基づいて文字列を分割することができ
my $line = "file1.gzfile2.txtfile2.gzfile3.xls";
my @exts = ('txt', 'xls', 'gz');
my $patt = join '|', map { '(?<=\.' . $_ . ')' } @exts;
my @abc = split /$patt/, $line;
print $_, "\n" for @abc;
まあ、何のプログラミング言語は、あなたの心を読むことができません 'スプリット「」'個々の文字に分割し、すべてのファイル名が 'Fで始まる場合。 ile ... '、' split /(?= file)/ 'は動作しますが、一般的な解決策はありません – amon
@aragaerあなたのコメントは事実上間違っています。 ['split'](http://perldoc.perl.org/functions/split.html)は、引数をpattern、string、limitとして取ります。あなたの注文は間違っています。そして 'print" @abc \ n "'は '$" eq "\ n" '(' $ "'は通常はスペースです)であれば問題ありません。 – amon