2012-06-26 142 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-toa-a- regular-expression-in-perl) – 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