私は#
または!
のいずれかで区切ります部品を抽出したい正規表現と分割の交互のマッチグループをキャプチャするにはどうすればよいですか?
my $foo = 'one#two#three!four#five#six';
、そこから文字列を持っています。これはsplit
と十分に簡単です:
my @parts = split /#|!/, $foo;
追加の要件は、私はまた、感嘆符をキャプチャする必要があるということです。だから
my @parts = split /#|(!)/, $foo;
この試みがundef
値又は(さらに明確分割の明細書に記載されている)感嘆符のいずれかを返します。
だから、私はgrep
で不要なundef
値を取り除く:これは私が何をしたいん
my @parts = grep { defined } split /#|(!)/, $foo;
。
しかし、私はgrep
も呼び出す必要がないように正規表現を変更できるかどうか疑問に思っていました。
私は、「grep」が悪いことではないことを示唆しています。これは、コードが何をしているかをはっきりと明らかにします。例えば。私の@parts = grep {not/^#$ /} split /(#|!)/、$ foo; ' – Sobrique
+++ @Sobrique :)半年後に私自身のコードを読むために、わかりにくい場合は... – jm666