Поиск конкретного блока try / catch с использованием RegEx - PullRequest
2 голосов
/ 11 ноября 2010

Интересно, как искать блок try / catch, в котором нет log.Error (ex) внутри блока catch.Под поиском я подразумеваю использование Visual Studio, встроенного в поиск регулярных выражений.

Регулярное выражение найдет блок следующим образом:

try
{
    CallSomeExceptionalFunction();
}
catch(Exception ex)
{
    CallSomething();
    // missing error handling
}

Этот блок должен быть пропущен регулярным выражением, поскольку он содержит log.Error:

try
{
    CallSomeExceptionalFunction();
}
catch(Exception ex)
{
    log.Error(ex);
}

Ответы [ 2 ]

4 голосов
/ 11 ноября 2010

Нельзя анализировать языки программирования на основе контекстно-свободной грамматики с регулярным выражением.

Только представьте, что в вашем блоке catch был блок try-catch, а в блоке catch - еще один блок try-catch, и только у одного из них есть log.Error.

1 голос
/ 11 ноября 2010

Предполагая, что вы хотите сделать это в коде, я не буду беспокоиться о регулярном выражении, я просто найду слово catch, затем посчитаю количество начальных скобок после этого { и вычтя все конечные скобки } из этого числа останавливается, когда я обнаружил строку, содержащую log.Error, и если строка не найдена до того, как счетчик достигнет нуля, то у вас есть экземпляр, в котором отсутствует журнал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...