Что может случиться с регулярным выражением
От: _NN_ www.nemerleweb.com
Дата: 21.09.16 10:46
Оценка:
Есть простой код

var r = new Regex(@"^\s*(?<code>\d+)\s*$", RegexOptions.Singleline);
var match = r.Match(input);
if (match.Success)
{
  ulong code;
  if (!ulong.TryParse(match.Groups["code"].Value, out code))
  {
    throw new FormatException(match.Groups["code"].Value);
  }
}


По неизвестной мне причине вылетает исключение при этом в строке исключение совершенно пусто.
Есть идеи почему это могло случиться ?

P.S.
Добавил в лог вывод целой строки, но проблема пока не воспроизводится.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Что может случиться с регулярным выражением
От: Sharov Россия  
Дата: 21.09.16 10:53
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Есть простой код


_NN>
_NN>var r = new Regex(@"^\s*(?<code>\d+)\s*$", RegexOptions.Singleline);
_NN>var match = r.Match(input);
_NN>if (match.Success)
_NN>{
_NN>  ulong code;
_NN>  if (!ulong.TryParse(match.Groups["code"].Value, out code))
_NN>  {
_NN>    throw new FormatException(match.Groups["code"].Value);
_NN>  }
_NN>}
_NN>


_NN>По неизвестной мне причине вылетает исключение при этом в строке исключение совершенно пусто.

_NN>Есть идеи почему это могло случиться ?

_NN>P.S.

_NN>Добавил в лог вывод целой строки, но проблема пока не воспроизводится.

Ну если match.Groups["code"].Value == String.Empty, то все логично.
Кодом людям нужно помогать!
Re[2]: Что может случиться с регулярным выражением
От: _NN_ www.nemerleweb.com
Дата: 21.09.16 11:40
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Ну если match.Groups["code"].Value == String.Empty, то все логично.

Есть идеи как может быть пустым в случае "\d+" ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Что может случиться с регулярным выражением
От: Sharov Россия  
Дата: 21.09.16 12:03
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, Sharov, Вы писали:


S>>Ну если match.Groups["code"].Value == String.Empty, то все логично.

_NN>Есть идеи как может быть пустым в случае "\d+" ?

А группа match.Groups["code"] точно не null? Можно пример вх. строки?
Кодом людям нужно помогать!
Re[4]: Что может случиться с регулярным выражением
От: _NN_ www.nemerleweb.com
Дата: 21.09.16 12:28
Оценка:
Здравствуйте, Sharov, Вы писали:

S>А группа match.Groups["code"] точно не null? Можно пример вх. строки?


Я не знаю какая строка, в этом и вопрос.
Пример обычной строки "1234".
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Что может случиться с регулярным выражением
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.09.16 13:40
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>По неизвестной мне причине вылетает исключение при этом в строке исключение совершенно пусто.

_NN>Есть идеи почему это могло случиться ?

А в реальном коде точно так же, как с примером, т.е. регекс конструируется строго на каждый матч?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[5]: Что может случиться с регулярным выражением
От: TK Лес кывт.рф
Дата: 21.09.16 15:07
Оценка:
Здравствуйте, _NN_, Вы писали:

S>>А группа match.Groups["code"] точно не null? Можно пример вх. строки?


_NN>Я не знаю какая строка, в этом и вопрос.

_NN>Пример обычной строки "1234".

а если в ulong не влезла?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: Что может случиться с регулярным выражением
От: Lexey Россия  
Дата: 21.09.16 15:08
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>По неизвестной мне причине вылетает исключение при этом в строке исключение совершенно пусто.

_NN>Есть идеи почему это могло случиться ?

Чудесато. input не может параллельно из другого потока поменяться?
"Будь достоин победы" (c) 8th Wizard's rule.
Re[6]: Что может случиться с регулярным выражением
От: Lexey Россия  
Дата: 21.09.16 15:09
Оценка:
Здравствуйте, TK, Вы писали:

TK>а если в ulong не влезла?


Так тогда не пустая строка была бы в эксепшене.
"Будь достоин победы" (c) 8th Wizard's rule.
Re[2]: Что может случиться с регулярным выражением
От: _NN_ www.nemerleweb.com
Дата: 21.09.16 17:41
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, _NN_, Вы писали:


_NN>>По неизвестной мне причине вылетает исключение при этом в строке исключение совершенно пусто.

_NN>>Есть идеи почему это могло случиться ?

AVK>А в реальном коде точно так же, как с примером, т.е. регекс конструируется строго на каждый матч?

Regex создается только один раз.
Неужели это может влиять ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Что может случиться с регулярным выражением
От: Sinix  
Дата: 21.09.16 18:02
Оценка:
Здравствуйте, _NN_, Вы писали:

AVK>>А в реальном коде точно так же, как с примером, т.е. регекс конструируется строго на каждый матч?

_NN>Regex создается только один раз.
_NN>Неужели это может влиять ?
А он вызывается из одного потока, или из нескольких?
Re[4]: Что может случиться с регулярным выражением
От: _NN_ www.nemerleweb.com
Дата: 21.09.16 18:22
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, _NN_, Вы писали:


AVK>>>А в реальном коде точно так же, как с примером, т.е. регекс конструируется строго на каждый матч?

_NN>>Regex создается только один раз.
_NN>>Неужели это может влиять ?
S>А он вызывается из одного потока, или из нескольких?
Один поток.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Что может случиться с регулярным выражением
От: TK Лес кывт.рф
Дата: 21.09.16 18:57
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Regex создается только один раз.

_NN>Неужели это может влиять ?

Нет конечно. The Regex class is immutable (read-only) and thread safe.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: Что может случиться с регулярным выражением
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 22.09.16 08:09
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>
_NN>var r = new Regex(@"^\s*(?<code>\d+)\s*$", RegexOptions.Singleline);
_NN>


А зачем здесь регекс? ulong.*Parse допускает любые пробельные символы вокруг числа: https://ideone.com/xjI6sg.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Отредактировано 22.09.2016 8:10 kochetkov.vladimir . Предыдущая версия .
Re: Что может случиться с регулярным выражением
От: _NN_ www.nemerleweb.com
Дата: 27.10.16 11:02
Оценка: 23 (1) :))) :)))
Здравствуйте, _NN_, Вы писали:

Нашлась проблема.
Вот полный код метода:

var r = new Regex(@"^\s*(?<code>\d+)\s*$", RegexOptions.Singleline);
var match = r.Match(input);
if (!match.Success)
{
  if (log.IsTraceEnabled)
  {
     log.Trace("Ignoring bad input");
     return false;
  }
}


ulong code;
if (!ulong.TryParse(match.Groups["code"].Value, out code))
{
  throw new FormatException(match.Groups["code"].Value);
}


Смотрели всей командой раз 10 и только на 11-й раз наконец дошло что происходит
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Что может случиться с регулярным выражением
От: Sinix  
Дата: 27.10.16 12:26
Оценка: +1
Здравствуйте, _NN_, Вы писали:

_NN>Смотрели всей командой раз 10 и только на 11-й раз наконец дошло что происходит

Эталонный гейзенбаг Веселее — разве что методы вида
[Conditional("DEBUG")]
void LogResult(object value) => ...

// ...

LogResult(DoSomethingImportant());
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.