2

こんにちは私は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";
}
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を追加する必要があります。現在、一致しているのは1回だけです。/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 に答える