我正在使用sqlite3
,C
我想添加对REGEXP
运营商的支持.默认情况下,regexp()
不存在用户定义的函数,并且调用REGEXP
通常会导致错误(根据SQLite页面).
如何添加regexp
支持功能REGEXP
?大概我会通过sqlite3_create_function
调用来做到这一点,但我不知道应用程序定义的是什么regexp()
样子.
我可以使用一个函数从regex.h
具有sqlite3_create_function
怎么样?我传递给SQLite的任何函数都必须使用sqlite3_context*,int,sqlite3_value**类型的三个参数.但是,SQLite文档似乎没有解释这些参数的含义.
是否有C
regexp()
函数的示例代码?
我无法使用Google或SQLite页面找到很多相关内容.
小智 6
您也可以尝试以下操作:
#include <regex.h>
Run Code Online (Sandbox Code Playgroud)
...
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(®ex, reg, REG_EXTENDED | REG_NOSUB);
if ( ret != 0 ) {
sqlite3_result_error(context, "error compiling regular expression", -1);
return;
}
ret = regexec(®ex, text , 0, NULL, 0);
regfree(®ex);
sqlite3_result_int(context, (ret != REG_NOMATCH));
}
Run Code Online (Sandbox Code Playgroud)
...
sqlite3_create_function(*db, "regexp", 2, SQLITE_ANY,0, &sqlite_regexp,0,0)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2799 次 |
最近记录: |