-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 回答