2012-02-29 7 views
3

を説明することができますいくつかのいずれかが2つの正規表現はここにあり、次の式は、誰も私にこの正規表現

$input =~ m/\G".*?"(,|$)/gc || $input =~ m/\G[^,]*(,|$)/gc || die; 
+2

どちらですか?どのビットを理解していないのですか? – Quentin

答えて

9

私に説明していただけます。最初は、次のとおりです。

\G # the end of the previous match 
".*?" # something in quotes 
(,|$) # and a comma, or the end of the string 

最初の1に障害が発生した場合に、第2がマッチします。

\G # the end of the previous match 
[^,]* # anything up to the next comma or end of string 
(,|$) # and then a comma, or the end of the string 

私の推測では、二つの正規表現を引用符で囲むか、引用符で囲まれていないことができますどちらか何かに一致するように設計されており、コンマの後にさらにいくつかの項目が続きます。

c修飾子はマッチングが失敗した場合に現在の位置を維持することを意味するので、最初のものが失敗した場合\Gアンカーが一致するように第二の試みにおいて変更されません。g改質剤は、次のため\Gための位置を設定します)

0

まず最初に、すべての文字列(つまり、/gc)と引用符とコンマまたはストリングの終わりの間にマッチすることを意味します。第2の意味は、ゼロ以上の(それは*です)非カンマ文字(それは[^,]です)のシーケンスにマッチすることを意味します。 \G修飾子は、それぞれの新しい一致が以前の一致の直後に開始されなければならないことを意味します。

関連する問題