Я работаю над REST API, который имеет конечную точку GET для поиска сделок в контексте фондовых бирж.
Он поддерживает динамическую фильтрацию, поэтому клиент может задать поле (столбец) торговли, оператор сравнения и значение сравнения
по своему желанию.
например, Result -eq [Win]
или Result -eq [BreakEven]
Оператор должен начинаться с тире, а значение сравнения должно быть заключено в квадратные скобки.
Все, что находится в квадратных скобках, будет рассматриваться как значение.
например, [some-value с пробелами, "двойными кавычками" и [] внутри]
вполне допустимы.
Между тремя компонентами фильтра должен быть хотя бы один пробел.
Фильтр отправляется как простая строка на бэкэнд и там проверяется с помощью регулярных выражений.
У меня уже есть регулярное выражение, которое это делает.
\s*(?<property>.*?)\s+(?<operator>-.*?)\s+\[(?<comparisonValue>.*?)\]\s*$
Вот несколько примеров из регулярного выражения 101
Теперь я хочу добавить литерал null, чтобы клиенты могли явно искать записи, которые не имеют значения.
Семантически все, что находится в квадратных скобках, рассматривается как значение, но null не является значением.
Поэтому скобки должны быть опущены при сравнении с null, например:Результат -ne null
Поэтому моему регулярному выражению нужно условие для соответствия либо литералу null (без квадратных скобок), либо значению в квадратных скобках.
У меня нет опыта, чтобы говорить о регулярных выражениях.
То, что у меня есть, было создано с помощью поиска в Google и проб и ошибок.
Оно предназначено для проверки входных данных, а не для их анализа.
Как мне добавить условие для соответствия либо значению (в квадратные скобки) или литеральный ноль?
И любые предложения по улучшению моего регулярного выражения будут высоко оценены.
Заранее спасибо!