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

Vì vậy, trong Perl, tôi muốn lưu trữ tất cả các kết quả khớp với cụm từ thông dụng đó. Tôi đang tìm cách lưu trữ giá trị giữa INFO \ n và \ n mỗi khi nó xảy ra.Regex - Khớp với tất cả các lần xuất hiện?

Nhưng tôi chỉ nhận được lần xuất hiện cuối cùng được lưu trữ. Regex của tôi có sai không?

+0

bản sao có thể có của [Làm thế nào tôi có thể tìm thấy tất cả các kết quả phù hợp với cụm từ thông dụng trong Perl?] (Http://stackoverflow.com/questions/1723440/how-can-i-find-all-matches-to-a- regular-expression-in-perl) – centic

Trả lời

10

Sử dụng công cụ sửa đổi /g để đối sánh toàn cầu.

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

Định lượng lười không cần thiết trong trường hợp này là . không khớp với dòng mới. Sau đây sẽ cung cấp hiệu suất tốt hơn:

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

/s có thể được sử dụng nếu bạn muốn thời gian khớp với dòng mới. Để biết thêm thông tin về các công cụ sửa đổi này, hãy xem perlre.

+0

Định lượng lười biếng '. *?' đau hiệu suất regex –

+0

Tại sao '/ s' là cần thiết? Tôi không thấy lý do nào cho điều đó, vì trận đấu của anh ấy ** không nên ** chứa bất kỳ ký tự dòng mới nào. –

+0

Bạn nói đúng là không quan trọng trong trường hợp này, nhưng vì anh ta không biết về '/ g' và khớp với các chuỗi nhiều dòng, có vẻ hợp lý rằng anh ta sẽ cần'/s' sớm hay muộn. – Tim

Các vấn đề liên quan