sqlite3 regexp сопоставляет обратные классы символов - PullRequest
0 голосов
/ 21 апреля 2020

Я разработал базу данных 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).

Поэтому мой вопрос таков:

  1. Я что-то упускаю в POSIX-совместимом регулярном выражении, что объясняет, почему соответствие возвращает true, а не должно?
  2. Существуют ли другие расширения регулярных выражений, которые лучше работают, особенно с NULL строками.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...