2

検索したい文字列のリストがあり、連続して 4 回以上出現する A または G 文字を含む文字列はすべて無視します。たとえば、TCAAAATC や GCTGGGGAA などの文字列は無視したいと考えています。

私はもう試した:

unless ($string =~ m/A{4,}?/g || m/G{4,}?/g)
{
    Do something;
}

しかし、「パターン マッチで初期化されていない値を使用しています (m//)」というエラー メッセージが表示されます。

任意の提案をいただければ幸いです。

4

2 に答える 2

3

との暗黙的な比較を避ける必要が$_あります。これは、次のように記述して実行できます。

unless ($string =~ m/A{4}/ || $string =~ m/G{4}/)

これは、文字列内で正確に 4 つの A または正確に 4 つの G を探します。4 つある場合は、4 つ以上あるかどうかは問題ではありません。

次を使用して、単一の正規表現に減らすことができます。

unless ($string =~ m/([AG])\1{3}/)

これは、A または G の後に同じ文字が 3 つ続くものを探します。

于 2013-08-20T03:32:37.197 に答える
3

書くことで

|| m/G{4,}?/g

$_この正規表現に対して暗黙的にテストしています。ただし、$_初期化されていないため、エラーが発生します。

書く

unless ($string =~ m/A{4}/ || $string =~ m/G{4}/)

代わりに (正規表現が簡略化されていることに注意してください)、または単一の式として、

unless ($string =~ m/A{4}|G{4}/)
于 2013-08-20T03:33:09.010 に答える