文字列を複数のパターンと照合し、その配列を配列に格納しようとしています。複数のパターンを取得する
入力は、次のいずれかになります。
-fnospacebetween
-f textwithspacebefore
@nospacebetween
@ textwithspacebefore
正規表現は-f
または@
後の文字列をキャッチする必要があります。スペースは、-f
と@
の前に、また-f
または@
と文字列の間で使用できます。
私は|
分割正規表現を使用することを考えましたが、特定の順序で2つの正規表現を使用すると、なぜ私の入力をキャッチしないのか分かりません。
単一の場合のシナリオ、期待通りに動作します:
my $text = '@anystring' ;
if($text =~ /^\s*\@\s*(\S*)/)
{
print "\n $1";
}
my $text = '-fanystring' ;
if($text =~ /^\s*-f\s*(\S*)/)
{
print "\n $1";
}
しかし、私は2つのいずれかでの単一の正規表現を使用しようとすると、私はUse of unitialized...
を得る:
my $text = '@anystring' ;
if($text =~ /^\s*-f\s*(\S*)|^\s*\@\s*(\S*)/)
{
print "\n $1";
}
しかし、この変形と、それが正常に動作します:
my $text = '@anystring' ;
if($text =~ /^\s*\@\s*(\S*)|^\s*-f\s*(\S*)/)
{
print "\n1: $1";
}
注文が切り替わると、正しく一致するのはなぜですか?
@Borodin、ごめんなさい、最初の2つの例だけに '-'を付けるべきです –
もう一つの解決策は、ブランチリセットを使うことです:' /(?\\ s * \ @ \ s * S *)|^\ s * -f \ s *(\ S *))/ 'パターンが完全に異なっていて、ボロディンの答えのようにそれらを「契約」することはできません。 –