2014-09-30 2 views
0

Я следующий запрос:Regex в SQLite запроса дает непризнанных лексема за исключением

String selectQuery = "SELECT * FROM " + DOCUMENT_TABLE + " WHERE " + DOCUMENT_TYPE + " REGEXP " + "(^|,)(pdf)(,|$)"; 

Во время компиляции я получаю эту ошибку:

android.database.sqlite.SQLiteException: unrecognized token: "^" (code 1): , while compiling: SELECT * FROM DOCUMENTTABLE WHERE TYPE REGEXP (^|,)(pdf)(,|$)

Столбец от того, где статья была написана значения в следующих формат:

  • документ, PDF
  • PDF
  • PDF, DOC

Как использовать регулярное выражение для извлечения нужной информации (мой случай, получить все документы, которые находятся в формате PDF, тоже)?

+0

Поместить регулярное выражение в выражение '' (одинарная кавычка). – Rustam

ответ

1

регулярное выражение должно быть в строкового литерала, поэтому его окружают с 'single quotes'. Это решает проблему синтаксиса.

Однако, нет необходимости в реализации REGEXP в sqlite, и API-интерфейсы Android sqlite на самом деле не позволяют устанавливать реализацию для REGEXP.

Чтобы решить основную проблему, перепроектируйте схему таким образом, чтобы вы не сохраняли выполнение запросов в значениях, разделенных запятыми.

1

Вы должны заключить регулярное выражение одинарные кавычки:

" REGEXP " + "'(^|,)(pdf)(,|$)'"; 
# here __^   and __^ 

Вы также можете использовать:

" REGEXP '\bpdf\b'"; 
Смежные вопросы