我正在尝试使用REGEXP在联系人数据库中使用android SQLite。我想要做的是为联系人显示名称进行全字匹配,以寻找诸如“叔叔”或“阿姨”之类的单词,即使显示名称可能是“叔叔山姆”或“阿姨朱莉”。但是每当我尝试使用REGEXP时,我都会收到错误
android.database.sqlite.SQLiteException: ICU error: uregex_open(): U_ILLEGAL_ARGUMENT_ERROR (code 1)
这是我在查询中尝试做的简化版本:
whereBuffer.append(ContactsContract.Contacts.DISPLAY_NAME).append(" REGEXP ").append("'[[:<:]]uncle[[:>:]]'");
答案 0 :(得分:1)
SQLite documentation解释了REGEXP
运算符是regexp()用户函数的特殊语法。在Android中,没有定义regexp()用户函数。
对于您要执行的匹配,LIKE
运算符应该足够了:
(ContactsContract.Contacts.DISPLAY_NAME).append(" LIKE ").append("'%uncle%'");
如果您需要更多一般模式匹配,请考虑使用GLOB
运算符。 GLOB
运算符与LIKE
类似,但对其通配符使用Unix文件通配语法。此外,与GLOB
不同,LIKE
区分大小写。