Я могу протестировать, если regex допустим в C#, не выдавая исключение

Удалить [] удалит только элементы в массиве. Он не удалит память, указанную элементами массива. Если вы хотите удалить память, указанную элементами массива

  1. , удалите каждую ячейку явным образом, вызвав delete для каждого элемента массива
  2. Затем удалите массив с помощью оператора delete []
46
задан Andy Lester 20 October 2008 в 14:48
поделиться

7 ответов

Пока Вы ловите очень определенные исключения, просто сделайте попытку/выгоду.

Исключения не являются злыми, если используется правильно.

39
ответ дан Robert 8 November 2019 в 00:08
поделиться

У меня есть метод, чтобы протестировать, допустим ли RegEx, но он просто обертывает regex в Попытку/Выгоду. Я не уверен, существует ли лучший способ сделать это, но я не мог бы найти тот.

0
ответ дан Jon Tackabury 8 November 2019 в 00:08
поделиться

Не без большой работы. Парсинг Regex может быть довольно включен, и нет ничего общедоступного в Платформе для проверки выражения.

Система. Текст. RegularExpressions. RegexNode. ScanRegex () надеется быть основной функцией, ответственной за парсинг выражения, но это является внутренним (и выдает исключения для любого недопустимого синтаксиса так или иначе). Таким образом, Вы были бы обязаны повторно реализовывать функциональность синтаксического анализа - который, несомненно, приведет к сбою в напряжении случаи или обновления Платформы.

я думаю, просто ловя ArgumentException, столь же хорошая идея, как Вы, вероятно, будете иметь в этой ситуации.

4
ответ дан Mark Brackett 8 November 2019 в 00:08
поделиться

В зависимости от того, кто цель для этого, я был бы очень осторожен. Не трудно создать regexes, который может отследить в обратном порядке на себе и съесть много ЦП и памяти - они могут быть эффективным вектором Отказа в обслуживании.

1
ответ дан Clinton Pierce 8 November 2019 в 00:08
поделиться

В.NET, если Вы не пишете свой собственный синтаксический анализатор регулярного выражения (который я категорически не рекомендовал бы), Вы почти наверняка собираетесь должны обернуть создание нового объекта Regex с попыткой/выгодой.

0
ответ дан theraccoonbear 8 November 2019 в 00:08
поделиться

Уродливый regex не хуже из причин исключения.

, Если Вы не уходите в отставку к очень ограниченное подмножество regex синтаксиса - и затем пишете regex (или синтаксический анализатор) для того - я думаю, что у Вас нет никакого другого способа протестировать, если это допустимо, но пытаться создать конечный автомат из него и заставить его соответствовать чему-то.

1
ответ дан Tomalak 8 November 2019 в 00:08
поделиться

I think exceptions are OK in this case.

Here's what I put together:

private static bool IsValidRegex(string pattern)
{
    if (string.IsNullOrEmpty(pattern)) return false;

    try
    {
        Regex.Match("", pattern);
    }
    catch (ArgumentException)
    {
        return false;
    }

    return true;
}
46
ответ дан 26 November 2019 в 20:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: