В приложении .NET (написанном на C #) у меня есть пользовательский интерфейс со списком и текстовым полем, используемым для ввода строки фильтра для фильтрации того, что отображается в списке. Я обновляю фильтр по мере ввода пользователя.

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

1
Steve Crane 19 Ноя 2009 в 15:39
2
Похоже, вам нужно регулярное выражение, которое проверяет выражение регулярного выражения :)
 – 
GraemeF
19 Ноя 2009 в 15:42
Эта мысль пришла мне в голову, но вызвала внезапную головную боль. :)
 – 
Steve Crane
19 Ноя 2009 в 15:43
Не слишком сложно, а? ^.+$ вот и вы: D
 – 
F.P
19 Ноя 2009 в 15:56

2 ответа

Лучший ответ

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

5
GraemeF 19 Ноя 2009 в 15:58
Я просто пойду по этому пути.
 – 
Steve Crane
19 Ноя 2009 в 17:20

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

1
slugster 19 Ноя 2009 в 15:50
Полностью согласованная и вероятная передовая практика. Просто скажи; «Для использования регулярного выражения введите rxstart(YOUR REGEX HERE)rxend и проанализируйте rxstart( и )rxend все, что находится между ними, определено как регулярное выражение и протестировано. Другая идея: дать пользователю флажок, чтобы он мог указать» Сейчас я набираю регулярное выражение ".
 – 
F.P
19 Ноя 2009 в 15:59