C ++ \ CLI Regex导致无限循环

时间:2014-02-19 09:55:25

标签: regex c++-cli

有人可以向我解释为什么这段代码会导致形成无限循环。除了正则表达式之外,它没有循环,我只是不理解它。

    System::String^ bytesOnly;
    System::String^ size = "54kb (54,568 bytes)";
    Regex^ r;
    Regex^ regex;
    r = gcnew Regex("[\(]");
    Match^ exch2010 = r->Match(size); 
    if (exch2010->Success){
        String^ pattern = "(?<=\()(.*)(?=\sb)";
        regex = gcnew Regex(pattern);
        Match^ m = regex->Match(size); 
        if (m->Success){
            bytesOnly = m->Value;
        }
        else{
            bytesOnly = "-1";
        }
        regex = gcnew Regex("[^0-9-]");
        bytesOnly = regex->Replace(bytesOnly, "");
    }
    else{
        regex = gcnew Regex("[^0-9-]");
        bytesOnly = regex->Replace(bytesOnly, "");
    }

我正在使用正则表达式首先检查 size 变量中是否有“(”),然后将字符串中的“54,568”数字放入 bytesOnly 变量

最后,除了 bytesOnly 中的数字之外,我删除了所有内容。看起来很简单,但是当我运行它时,我得到一个无限循环。

1 个答案:

答案 0 :(得分:-1)

我使用Visual Studio编译代码,需要添加两个反斜杠。

System::String^ bytesOnly;
System::String^ size = "54kb (54,568 bytes)";
Regex^ r;
Regex^ regex;
r = gcnew Regex("[\(]");  //Do not need both here since I'm not getting the value.
Match^ exch2010 = r->Match(size); 
if (exch2010->Success){
    String^ pattern = "(?<=\\()(.*)(?=\\sb)";
    regex = gcnew Regex(pattern);
    Match^ m = regex->Match(size); 
    if (m->Success){
        bytesOnly = m->Value;
    }
    else{
        bytesOnly = "-1";
    }
    regex = gcnew Regex("[^0-9-]");
    bytesOnly = regex->Replace(bytesOnly, "");
}
else{
    regex = gcnew Regex("[^0-9-]");
    bytesOnly = regex->Replace(bytesOnly, "");
}