2011-09-28 34 views
31

Giả sử tôi đang quét qua một trang html thô đang tìm kiếm regex này. (Dấu ngoặc kép cuối cùng là cố ý).Perl lặp qua từng trận đấu

m/(https?:\/\/.*?(?:'|"))/ 

Mẫu này có thể phù hợp ~ 100 lần. Một thành ngữ perl phổ biến/một cách nhanh chóng để lặp qua một danh sách tất cả các trận đấu nhóm chụp là gì?

Trả lời

49

Từ perlretut (một hướng dẫn rất tốt)

while ($x =~ /(\w+)/g) { 
     print "Word is $1, ends at position ", pos $x, "\n"; 
    } 

Bạn có thể sử dụng while cùng với các sửa đổi g để lặp qua tất cả các trận đấu, với $1 bạn nhận được nội dung của nhóm chụp của bạn 1, và ở đây ví dụ từ hướng dẫn bạn cũng nhận được vị trí với pos.

+1

Cảm ơn Stema cho recommanding perlretut: nó là một trang tuyệt vời cho Regular Expressions trong Perl; nó bao gồm mọi thứ từ sơ cấp đến nâng cao. –

+0

Đừng quên thêm công cụ sửa đổi 'm' nếu bạn xử lý các chuỗi nhiều dòng và neo ^, $ –

6

Việc kết hợp toàn cầu 'g' modifier trả về một danh sách các trận đấu bị bắt trong danh sách bối cảnh:

say $_ for $str =~ /un($wanted)/g; # Prints only $wanted 
0

@Zahid: Tôi nghĩ rằng cách tiếp cận của bạn là nhỏ gọn hơn. hy vọng đoạn sau đây sẽ giúp để hiểu ví dụ của bạn

my $str = 'file_%date%_%name%_%lang%.txt'; 
my @ts = $str =~ /%([\w]+)%/g;#   <----------Zahid said 
print join(", ", @ts); 

Output:

date, name, lang 
Các vấn đề liên quan