2014-02-19 2 views
0

Может кто-нибудь объяснить мне, почему этот код вызывает формирование бесконечного цикла. В нем нет циклов, кроме выражений регулярных выражений, и я просто не понимаю.C++ CLI Regex вызывает бесконечный цикл

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, ""); 
    } 

Я использую регулярное выражение сначала проверить, если есть «(» в размера переменной, а затем поместить «54,568» число из строки в переменную в bytesOnly.

Наконец, я удалить все, кроме чисел от bytesOnly. Кажется, довольно просто, но когда я запускаю его я получаю бесконечный цикл.

ответ

-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, ""); 
} 
+0

Ответы на вопросы не очень хорошие ... –

+1

@JochenKalmbach, Почему вы так говорите? http://meta.stackexchange.com/questions/17845/etiquette-for-answering-your-own-question. В стороне, качество вопроса и ответа невелико. –

+0

@MattSmith: Хороший вопрос ... не знал, что .. извините –

Смежные вопросы