我想在源代码中匹配 ''中的内容,比如 语句:fanme('1','2',0);中可以匹配出'1'和'2',但还要能匹配出fname,(,,,0,),相当于在''之外匹配其它字符,请问该正则表达式该怎么写????
谢谢了!写了这样的语句,但没有实现,苦恼啊!!!!!!!!!!!
            Regex r = new Regex(@"\w+|[^A-Za-z0-9_ \f\t\v](?!\(+\))|(\'|\"")(.*?)(\1)", RegexOptions.IgnoreCase | RegexOptions.Compiled);

解决方案 »

  1.   

    不好意思,没说明白!匹配字符串: "fname('1','2',0);"
    匹配成功输出字符:fname
                 (
                  '1'
                  ,
                  '2'
                  ,
                  0
                  )
                  ;要求能成功匹配以上字符,我要把这些匹配的字符放进一个数组中来使用,各位高手请帮忙!下面是实现代码,但匹配不成功:            TheBuffer.Initialize();
                int count = 0;            Regex r = new Regex(@"\w+|[^A-Za-z0-9_ \f\t\v](?!\(+\))|(\'|\"")(.*?)(\1)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
                Match m;            for (m = r.Match(s); m.Success; m = m.NextMatch())
                {
                    TheBuffer[count].Word = m.Value;
                    TheBuffer[count].Position = m.Index;
                    TheBuffer[count].Length = m.Length;                count++;
                }       
      

  2.   

    匹配源字符串: string s = "fname('1','2',0);"
      

  3.   

    怎么都看不明白啊???对于这样一个字符串"fname('1','2',0);"
    我需要在里面提取出若干字符来放在数组中,对于一个单词形式,如"fname"要全字符提取,对于' '中的内容也要连' '一起提取,其它标点符号可以单字符提取,所以对于上面的字符串:
    "fname('1','2',0);" 可以匹配出如下结果:              fname
                 (
                  '1'
                  ,
                  '2'
                  ,
                  0
                  )
                  ;
      

  4.   

    如下正则表达式:\w+|\(|\'\w+\'|\,|\)|\;使用
    string s = "fname('123','45',6)";
    测试结果如下
    frame
    (
    '123'
    ,
    '45'
    ,
    6
    )
    ;
    符合你的要求不?
      

  5.   

    ([a-zA-Z]+|\(|\'|[0-9a-zA-Z]+|\,|\)|\;)输出
    fname
    (
    '
    1
    '
    ,
    '
    2
    '
    ,
    0
    )
    ;
      

  6.   

    ([a-zA-Z]+|\(|\'[0-9a-zA-Z]+\'|\,|\)|\;)fname
    (
    '1'
    ,
    '2'
    ,
    )
    ;
      

  7.   

    报错误如下:正在分析“\w+|\(|\'\w+\'|\,|\|\;)”- ) 过多。此正则表达式在C#下未运行通过,编译倒通过了,先谢谢了!
      

  8.   

    ([a-zA-Z]+|\(|\'[0-9a-zA-Z]+\'|\,|\)|\;|[0-9]+)fname
    (
    '1'
    ,
    '2'
    ,
    0
    )
    ;
      

  9.   

    ([a-zA-Z]+|\(|\'|[0-9a-zA-Z]+|\,|\)|\;)不符合要求,要求引号内连同引号一同匹配,谢谢!
      

  10.   

    ([a-zA-Z]+|\(|\'[0-9a-zA-Z]+\'|\,|\)|\;|[0-9]+)\w+|\(|\'\w+\'|\,|\)|\;都通过测试,谢谢!
      

  11.   

    如果你是要对自定义的函数进行自解析的话考虑情况1
    fff123 ('11','啊你啊',0);表达式
    ^[a-zA-Z]\w+|\(|'[^']*'|\)|\,|[0-9]+|\;    //注意'啊你啊'中不能有'输出fff123
    (
    '11'
    ,
    'aa'
    ,
    0
    )
    ;
    情况2
    fff123 (string a,string b,int c);^[a-zA-Z]\w+|\(|[a-zA-Z]\w+\s+[a-zA-Z]\w*|\)|\,|[0-9]+|\;fff123
    (
    string a
    ,
    string b
    ,
    int c
    )
    ;
      

  12.   

    我举的例子太简单了,其实要考虑的情况比较多,下面分析一下:对于这样的语句:   var f1name = ' '; 要能提取的字符如下: 
    var
    f1name
    =
    ' '
    ;
    对于这样的语句:  sysLog('dataset9 run error:');要能提取的字符如下: 
    sysLog
    ('dataset9 run error:'
    )
    ;对于这样的语句: /* f3name = DS_ResultValue(10,"0","0"); 要能提取的字符如下: 
    /
    *
    f3name 
    =
    DS_ResultValue
    (
    10
    ,
    "0"
    ,
    "0"
    )
    ;
    对于这样的语句: //DS_Run(8); 要能提取的字符如下:
    /
    /
    DS_Run
    (
    8
    )
    ;
    总之,对于语句中的存在双引号""和单引号''的部分要连同引号一同提取,对于引号之外的,按连续单词提取,不能把f1name 拆成f 1 name ,其它标点符号由单个提取,如,;()=+-*/以上对于简单的例子可以胜任,对于我现在提出的例子不能胜任,请各位指点!
      

  13.   

    这是本人的做法:比较笨,有没有更好的?\{|\}|\=|\;|\,|\(|\)|\\|\n|\*|\/|\w+|[^A-Za-z0-9_ \f\t\v]\(|(\'|\"")(.*?)(\1)
      

  14.   

    ([a-zA-Z0-9]+)|(\()|(\))|(\'[a-zA-Z]+\'(?=\s*))
    你不应该用一个正则表达式解决问题,如果是做编译器的语法分析的话,自己写分析器比正则表达式更好。
      

  15.   

    有点类似于编译器的语法分析,但我的主要目的是在richtextbox中高亮关键字,所以想用一个正则表达式就解决问题
      

  16.   

    ([a-zA-Z0-9]+)|(\()|(\))|(\'[a-zA-Z]+\'(?=\s*))没有达到效果