2014-06-09 57 views
-1

我一直在使用這種Perl的正則表達式腳本現在一會兒:如何在Perl中打印來自同一行的多個單詞?

open DOC1, "<", "list.txt" or die $!; 
open DOC2, "> list.xls"; 
while (my $lines = <DOC1>) { 
     if ($lines =~ m/([^\s]+(([a-z0-9._%+-]+\@)|([a-zA-Z0-9]{2,15}(\.|\-|_)[a-zA-Z0-9]{2,15})))/i) { 
     print DOC2 lc($1), "\n"; 
    } 
} 
close DOC2; 
close DOC1; 

它工作正常,但最近我意識到,它打印在每行只有第一個匹配。一旦找到匹配並打印出來,它就會跳到下一行,而無需進一步檢查當前行。 我該如何解決這個問題?

+0

在我看來你想匹配的電子郵件地址? – hwnd

回答

0

您要使用的g修飾符(G爲全球,從而節省你的比賽作出後的字符串中的位置,並且可以讓你找到多個匹配),然後執行一個while循環的正則表達式,而不是一個if。試試這個:

open DOC1, "<", "list.txt" or die $!; 
open DOC2, "> list.xls"; 
while (my $lines = <DOC1>) { 
    while ($lines =~ m/([^\s]+(([a-z0-9._%+-]+\@)|([a-zA-Z0-9]{2,15}(\.|\-|_)[a-zA-Z0-9]{2,15})))/gi) { 
     print DOC2 lc($1), "\n"; 
    } 
} 
close DOC2; 
close DOC1; 
+0

是的!那就是訣竅。非常感謝。 – user3679894

相關問題