2012-12-03 59 views
2

你好,我使用Perl,現在我不知道如何得到輸出像我想要的。我只想打印所有數字beetween下面是我的代碼,我希望這裏有人可以幫助我找到一個正確的正則表達式。如何獲得一個正確的正則表達式來獲得像我想要的輸出

請幫我...我在這裏的代碼

#!/usr/bin/perl 
my $string = "<TR><TD COLSPAN=2 VALIGN=TOP>Please enter the random key shown below:<TR><TD>&nbsp;<TD VALIGN=TOP><FONT SIZE=+1><FONT COLOR=WHITE>...</FONT>4<FONT COLOR=WHITE>...</FONT>5<FONT COLOR=WHITE>...</FONT>4<FONT COLOR=WHITE>..</FONT>4<FONT COLOR=WHITE>..</FONT>2<FONT COLOR=WHITE>..</FONT>2</FONT></TR>"; 

if ($string =~ m,</FONT>(\d)<FONT COLOR=WHITE,i) { 
    print "$1\n"; #output 454422 
} else { 
    print "Wrong Regex! \n"; 
} 
+2

歡迎使用stackoverflow。你展示你的代碼很好。現在,你說輸出不像你想要的那樣......所以,你想要它?它有什麼問題?另一件事:你可能會讓人們告訴你不要用正則表達式解析HTML。 – simbabque

回答

1

您正在尋找的/g標誌「全球賽」,它匹配的所有匹配模式,而不是隻是第一個。

while ($string =~ m,</FONT>(\d)<FONT COLOR=WHITE,ig) { 
    print "$1\n"; 
} # output 45442 

請注意,最後的2將不符合您的模式。它會如果你改變它:

m,</FONT>(\d)(?:</FONT|<FONT COLOR=WHITE),ig 
+0

感謝完成了很多任務 – blitz5755

1

我假設你想要的輸出是註釋行#output 454422。爲了達到這個目的,你需要將你的正則表達式換成while -loop並添加/gmodifier。現在,它只匹配一次。

my $string = 
"<TR><TD COLSPAN=2 VALIGN=TOP>Please enter the random key shown below:<TR><TD>&nbsp;<TD VALIGN=TOP><FONT SIZE=+1><FONT COLOR=WHITE>...</FONT>4<FONT COLOR=WHITE>...</FONT>5<FONT COLOR=WHITE>...</FONT>4<FONT COLOR=WHITE>..</FONT>4<FONT COLOR=WHITE>..</FONT>2<FONT COLOR=WHITE>..</FONT>2</FONT></TR>"; 

while ($string =~ m,</FONT>(\d)<FONT COLOR=WHITE,ig) { 
    if ($1) { 
    print "$1\n"; 
    #output 454422 
    } else { 

    print "Wrong Regex! \n"; 
    } 
} 
+0

感謝完成了很多任務 – blitz5755