加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL中的SQLite并支持REGEXP

发布时间:2020-12-12 07:04:27 所属栏目:MsSql教程 来源:网络整理
导读:我在C中使用sqlite3,我想添加对REGEXP运算符的支持.默认情况下,用户定义的函数 regexp()不存在,调用REGEXP通常会导致错误(根据SQLite页面). 如何添加正则表达式函数以支持REGEXP?大概我会通过sqlite3_create_function调用来做到这一点,但我不知道应用程序定
我在C中使用sqlite3,我想添加对REGEXP运算符的支持.默认情况下,用户定义的函数 regexp()不存在,调用REGEXP通常会导致错误(根据SQLite页面).

>如何添加正则表达式函数以支持REGEXP?大概我会通过sqlite3_create_function调用来做到这一点,但我不知道应用程序定义的regexp()会是什么样子.
>我可以使用regex.h中的函数和sqlite3_create_function以及如何使用?我传递给SQLite的任何函数都必须使用sqlite3_context *,int,sqlite3_value **类型的三个参数.但是,SQLite文档似乎没有解释这些参数的含义.
>是否有C regexp()函数的示例代码?

我无法使用Google或SQLite页面找到相关信息.

解决方法

你也可以试试这个:
#include <regex.h>

void sqlite_regexp(sqlite3_context* context,int argc,sqlite3_value** values) {
    int ret;
    regex_t regex;
    char* reg = (char*)sqlite3_value_text(values[0]);
    char* text = (char*)sqlite3_value_text(values[1]);

    if ( argc != 2 || reg == 0 || text == 0) {
        sqlite3_result_error(context,"SQL function regexp() called with invalid arguments.n",-1);
        return;
    }

    ret = regcomp(&regex,reg,REG_EXTENDED | REG_NOSUB);
    if ( ret != 0 ) {
        sqlite3_result_error(context,"error compiling regular expression",-1);
        return;
    }

    ret = regexec(&regex,text,NULL,0);
    regfree(&regex);

    sqlite3_result_int(context,(ret != REG_NOMATCH));
}

sqlite3_create_function(*db,"regexp",2,SQLITE_ANY,&sqlite_regexp,0)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读