如何在 Android 中使用正则表达式运行查询

问题描述 投票:0回答:3

我想使用

SQLite
regexp
中使用
Android
运行查询。 我该怎么做?

android regex sqlite
3个回答
5
投票

不幸的是,Android 目前似乎没有提供一种将用户函数注入到 sqlite 中的方法,而这是你需要使

REGEXP
工作的方法(具体来说,你需要一个名为
regexp()
的用户函数) )——因此您可能必须进行更广泛的选择(使用比您想要的正则表达式更广泛的
LIKE
条件),并在应用程序中进一步区分“实际”结果(那些真正与您想要的正则表达式匹配的结果)与
java.util.regex
.


0
投票

这里的聚会已经很晚了,但您可以在 Room 中使用 REGEXP - 您只需先启用它即可。首先,在您的 @Dao 接口中,设置一个 @RawQuery 函数(在 Kotlin 中):

@Dao
interface WordsDao {
    @RawQuery
    fun getMatches(query: SimpleSQLiteQuery): List<Word>

    @RawQuery
    fun enableRegexp(query: SimpleSQLiteQuery): Boolean

}

然后您需要使用查询来调用它以启用 REGEXP:

private fun enableRegexp() {
    Single.fromCallable {
        appDB?.wordsDao()?.enableRegexp(SimpleSQLiteQuery("PRAGMA compile_options='ENABLE_REGEXP'"))
    }.doOnSuccess {
        Log.d("REGEXP", "Success")
    }.subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe()
}

现在您可以使用正则表达式在数据库上运行 SELECT 查询:

appDB?.wordsDao()?.getMatches(SimpleSQLiteQuery("SELECT * FROM words_alpha WHERE word REGEXP '^[olgf]{4}+\$'"))

-3
投票

模式是编译后的正则表达式。很多情况下,方便 String.matches、String.replaceAll 和 String.split 等方法 会更好,但如果你需要用同样的东西做很多工作 正则表达式,编译一次可能会更有效 重复使用它。 Pattern 类及其同伴 Matcher 还提供 比 String 暴露的少量功能更多。

http://developer.android.com/reference/java/util/regex/Pattern.html

© www.soinside.com 2019 - 2024. All rights reserved.