SQL中的SQLite并支持REGEXP

前端之家收集整理的这篇文章主要介绍了SQL中的SQLite并支持REGEXP前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在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)
原文链接:https://www.f2er.com/mssql/77092.html

猜你在找的MsSQL相关文章