如何获得正确的正则表达式以获得我想要的输出

时间:2012-12-03 12:05:49

标签: regex perl

您好我正在使用perl,现在我不知道如何获得我想要的输出。我想只打印下面DIGIT之间的所有数字是我的代码我希望有人可以帮我找到一个正确的正则表达式。

请帮帮我...这里是我的代码

#!/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 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我假设你想要的输出是注释行#output 454422。为此,您需要在while循环中包装正则表达式并添加/g modifier。现在,它只匹配一次。

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";
  }
}