2012-06-26 3 views
5
my @matches = ($result =~ m/INFO\n(.*?)\n/); 

したがって、Perlではすべての一致をその正規表現に保存したいと思います。私はINFOの間に値を格納するために\ nと\ nが発生するたびに探しています。正規表現 - すべての一致をマッチさせますか?

しかし、私は最後のオカレンスだけを保存しています。私の正規表現は間違っていますか?

+0

[Perlで正規表現にマッチするものをすべて見つけるにはどうすればいいですか?](http://stackoverflow.com/questions/1723440/how-can-i-find-all-matches-to-a- – centic

答えて

10

/g修飾子をグローバルマッチングに使用します。

my @matches = ($result =~ m/INFO\n(.*?)\n/g); 

レイジー定量.は改行と一致しないように、この場合には不要です。以下は、より優れた性能を与える:あなたは期間が改行にマッチさせたいならば

my @matches = ($result =~ m/INFO\n(.*)\n/g); 

/sを使用することができます。これらの修飾子の詳細については、perlreを参照してください。

+0

レイジー数量 '。*?'は正規表現のパフォーマンスを傷つける –

+0

なぜ '/ s'が必要なのですか?彼の試合**に改行文字は含まれていてはいけません。 –

+0

この場合は問題ではありませんが、 '/ g'について知りませんでしたし、複数行の文字列にマッチしていたので、遅かれ早かれ'/s'が必要になると思われました。 – Tim