Я разработал базу данных sqlite3 с SQLiteStudio и браузером БД для SQLite. Оба реализуют методы регулярного выражения Qt REGEXP
, которые я использую для запросов и ограничений CHECK
.
Затем я приступил к написанию сценария python, который должен вручную загрузить расширение регулярного выражения, для которого я экспериментировал с одним из пакета sqlite3-pcre
и с указанным в репозитории исходного кода sqlite3 (очевидно, совместимым с POSIX).
Последний не будет соответствовать правильно перевернутым группам символов, например regexp('[^a]', 'a')
будет соответствовать, даже если единственным символом в строке является «а». Возможно, я что-то упускаю из-за странности начала и конца строки, но мне это кажется ошибкой?
Первая будет работать, как и ожидалось, но затем не сможет выполнить pragma integrity_check;
, потому что У меня есть строки, которые NULL
(что допустимо), но расширение pcre-regexp будет жаловаться на error: no string
(на который также ссылались в другом комментарии на SO, как на ошибку, которую можно обойти, проверив сначала NOT NULL
).
Поэтому мой вопрос таков:
- Я что-то упускаю в POSIX-совместимом регулярном выражении, что объясняет, почему соответствие возвращает true, а не должно?
- Существуют ли другие расширения регулярных выражений, которые лучше работают, особенно с
NULL
строками.