有人可以向我解释为什么这段代码会导致形成无限循环。除了正则表达式之外,它没有循环,我只是不理解它。
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 中的数字之外,我删除了所有内容。看起来很简单,但是当我运行它时,我得到一个无限循环。
答案 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, "");
}