うん、それは興味深いものです。私の最初の考えは、あなたの区切り文字は常に奇数になるので、奇数番号の配列要素は捨てることができます。おそらく、このような
何か?:
my %s = (split (/([[:alpha:]])\1+/, '123aaaa23a3'), '');
print Dumper \%s;
これはあなたを与えるだろう:
$VAR1 = {
'23a3' => '',
'123' => 'a'
};
をですから、keys
を経由して、あなたのパターンを抽出することができます。
残念ながら、%+
を介してパターンマッチを「選択」するという私の2番目のアプローチは特に役に立ちません(分割は正規表現のものを埋め込むことはありません)。
しかし、このような何か:名前のキャプチャを使用することにより
my @delims ='123aaaa23a3' =~ m/(?<delim>[[:alpha:]])\g{delim}+/g;
print Dumper \%+;
、我々はa
はキャプチャグループからのものであることを識別します。残念ながら、split
でこれを行うと、2パスのアプローチにつながる可能性があります。
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
my $str = '123aaaa23a3';
#build a regex out of '2-or-more' characters.
my $regex = join ("|", map { $_."{2,}"} $str =~ m/([[:alpha:]])\1+/g);
#make the regex non-capturing
$regex = qr/(?:$regex)/;
print "Using: $regex\n";
#split on the regex
my @s = split m/$regex/, $str;
print Dumper \@s;
我々は最初の私たちのdelmitersとして設定するには、「2-または-以上」の文字パターンを抽出するための文字列を処理:
これは私が得た最も近いです。次に、非キャプチャを使用して正規表現を組み立てて分割することができます。
キャプチャグループを持たないように正規表現を変更することはできませんが、 'split 'によって返されたリストの奇数番号の要素をすべて捨てることができます – hobbs
正規表現にキャプチャグループ返されるリストには、一致/グループ化された部分文字列も含まれます。 'my $ str = '123aaaa23a3' =〜s /([[:alpha:]])\ 1 +/~~/rを使用することもできます。私の@s = split/~~ /、$ str; ' – hwnd