2

您好,我正在使用 perl,现在我不知道如何获得我想要的输出。我只想打印下面的所有数字 beetween 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";
}
4

2 回答 2

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
于 2012-12-03T12:14:13.277 回答
1

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

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";
  }
}
于 2012-12-03T12:14:31.253 回答