C#正则表达式无法正常工作

时间:2015-10-28 11:40:49

标签: c# regex

我一直试图编写一个我知道发现6个匹配的正则表达式,因为我使用了许多正则表达式引擎来检查它。问题在于Match-> nextMatch,或者它更聪明的等价物:

Match m= regex.Match(data,nextRelevantIndex);

当我使用上述方法时,我从 6 中得到 3个结果。 但是当我使用

  MatchCollection mc = r.Matches(data);

  foreach (Match m in mc)
  {
     // …
  }

它迭代了6次。 不幸的是我不能使用这个版本,因为我改变了我运行的数据,对我来说比使用

要困难得多。

regex.Match(data,nextRelevantIndex);

这是C#中的已知问题吗?什么是最好的解决方案?

正则表达式是:

((?:var\s+)?[\w_]+\s*=)?\s*\$\.import\s*\((?:[""'']([^''"";)]+)[""''])(?:\s*,\s*(?:[""'']([^''"";)]+)[""'']))?\s*\)(\.[^;]+;)?

字符串是:

//from project
$.import("sap.hana.ide.catalog.plugin.performance.server.lib", "helpers");
var h = $.sap.hana.ide.catalog.plugin.performance.server.lib.helpers;

//basic example
$.import("a.b","math"); //var otherHashVar= new otherHash();
$.a.b.math.max(1);  //otherHashVar.max(1);
alert($.a.b.math.a);//alert(otherHashVar.a);

//a bit more complex
var z=$.import("a.b.c","x"); // var z=new otherHash(); -> no additional fixes to be done
z.foo(); 

//another variation
$.import ("a.b","myLib").x(); // similar to first 
//var otherHashVar=new OtherHash();
//otherHashVar.x();

var z=$.import("a\b\c.xsjs"); 

z=$.import("a\b\c.xsjs").a.b.c++;

,代码是:

       while(m.Success){

            m = r.Match(data, m.Index + m.Length);
        }

因为我目前没有修改数据(当我成功完成6场比赛时会这样做)

1 个答案:

答案 0 :(得分:0)

问题出在您的计划的其他地方。

以下内容将6个匹配项写入控制台:

using System;
using System.Text.RegularExpressions;

public class Program
{
public static void Main()
{
    String data="//from project\r\n$.import(\"sap.hana.ide.catalog.plugin.performance.server.lib\", \"helpers\");\r\nvar h = $.sap.hana.ide.catalog.plugin.performance.server.lib.helpers;\r\n//basic example\r\n$.import(\"a.b\",\"math\"); //var otherHashVar= new otherHash();\r\n$.a.b.math.max(1);  //otherHashVar.max(1);\r\n\ralert($.a.b.math.a);//alert(otherHashVar.a);\r\n\r\n//a bit more complex\rv\n\r z=$.import(\"a.b.c\",\"x\"); // var z=new otherHash(); -> no additional fixes to be done\rz\n.foo(); \r\n\r//another variation\r$.import (\"a.b\",\"myLib\").x(); // similar to first \r\n//var otherHashVar=new OtherHash();\r\n//otherHashVar.x();\r\n\r\nvar z=$.import(\"a\\b\\c.xsjs\"); \r\n\r\nz=$.import(\"a\\b\\c.xsjs\").a.b.c++;"   
        ;
    //System.Console.WriteLine(data);
    String expr="((?:var\\s+)?[\\w_]+\\s*=)?\\s*\\$\\.import\\s*\\((?:[\"\"'']([^''\"\";)]+)[\"\"''])(?:\\s*,\\s*(?:[\"\"'']([^''\"\";)]+)[\"\"'']))?\\s*\\)(\\.[^;]+;)?";
    Regex r=new Regex(expr);
    Match m=r.Match(data);
    while(m.Success){
        System.Console.WriteLine("Match found ");
        System.Console.WriteLine(m.Value);
        System.Console.WriteLine();
        m = r.Match(data, m.Index + m.Length);
    }

}


}

Dot Net fiddle

另外,您声明不能在matchcollection中使用foreach匹配,因为您正在修改数据。您正在做什么修改,并考虑过使用Regex.Replace