-7

この正規表現が次のように構築されないのはなぜですか。

tmprect = string "gg_rct_MyReg1"
regex = @"^\s*set\s+"+tmprect+@"\s*=\s*Rect\s*\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*,\s**(.+)\s*\).*$";

働かない

set gg_rct_MyReg1 = Rect (-704.0 ,   -352.0, 224.0   , 448.0) //rect 1

私は何を間違えましたか?

///編集済み:

string findrectcoord = @"^\s*set\s+" + tmprect + @"\s*=\s*Rect\s*\(\s*([^,\s]*)\s*,\s*([^,\s]*)\s*,\s*([^,\s]*)\s*,\s*([^)\s]*)\s*\).*$";
StreamReader file3 = new StreamReader(openFileDialog1.FileName);
string line2;
while ((line2 = file3.ReadLine()) != null)
{
    Regex foundrectr = new Regex(findrectcoord);
    Match foundrectm = foundrectr.Match(line2);
      if (foundrectm.Success)
       {
         MessageBox.Show("YES");

       }
  }

ストリング:

set gg_rct_MyReg1 = Rect( -704.0  ,  -352.0, 224.0  , 288.0 ) //JassCode

見つかりません

4

1 に答える 1

2

正規表現自体は、醜くて非効率的ですが、機能するはずです。ただし、正規表現を作成する前に、追加する文字列を正規表現に割り当てる必要があります。ここまで来たら、クリーンアップしましょう。

string tmprect = "gg_rct_MyReg1";
Regex regexObj = new Regex(@"^\s*set\s+" + tmprect + 
                           @"\s*=\s*Rect\s*\(\s*([^,\s]*)\s*,\s*([^,\s]*)\s*,\s*([^,\s]*)\s*,\s*([^)\s]*)\s*\).*$");

([^,\s]*)コンマまたはスペースを除く任意の数の文字に一致します。.*これは、どちらが一致しすぎて、正規表現エンジンを強制的にバックトラックさせるよりも具体的です。

于 2013-06-17T14:31:31.023 に答える