2011-09-28 102 views
31

假設我正在瀏覽原始html頁面,尋找這個正則表達式。 (最後的引號是有意的)。Perl遍歷每場比賽

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

這種模式可能匹配~100次。什麼是常見的perl習慣用法/快速方法遍歷所有捕獲組匹配的列表?

回答

49

perlretut(很細的教程)

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

您可以同時使用whileg修飾符來遍歷所有的比賽,與$1你得到捕獲組1的含量,並在此從教程的例子中,您也可以獲得pos的位置。

+1

感謝STEMA爲recommanding perlretut:它是在Perl的正則表達式的真棒頁;它涵蓋了從初學者到高級的所有內容。 –

+0

如果處理多行字符串和錨點,請不要忘記添加'm'修飾符^,$ –

6

整體匹配「g」修改返回列表上下文中獲取匹配的列表:

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

@Zahid:我覺得你的做法是更緊湊。希望下面的代碼片段將有助於瞭解您的例子

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

輸出:

date, name, lang