用sqlite3中的REGEXP替换字符串的一部分

rub*_*o77 8 regex sqlite pcre

我安装了REGEX支持

apt-get install sqlite3 sqlite3-pcre
Run Code Online (Sandbox Code Playgroud)

现在我可以在bash控制台上的查询中使用REGEX了

DB="somedb.db"
REGEX_EXTENSION="SELECT load_extension('/usr/lib/sqlite3/pcre.so');"
sqlite3 $DB "$REGEX_EXTENSION select * from sometable where name REGEXP '^[a-z]+$'"
Run Code Online (Sandbox Code Playgroud)

但是如何使用正则表达式使用sqlite查询更新字符串?

Vis*_*agi 8

默认情况下,Sqlite不提供regex_replace函数。您需要将其作为扩展加载。这是我设法做到的方式。

下载此C代码进行扩展(icu_replace)

使用它编译

gcc --shared -fPIC -I sqlite-autoconf-3071100 icu_replace.c -o icu_replace.so
Run Code Online (Sandbox Code Playgroud)

并在sqlite3 runn下面的命令发布后,上述命令已运行并创建文件icu_replace.so

SELECT load_extension(' path to icu_replace.so', 'sqlite3_extension_init') from dual;
Run Code Online (Sandbox Code Playgroud)

之后,您将可以使用以下功能:

select regex_replace('\bThe\b',x,'M') from dual;
Run Code Online (Sandbox Code Playgroud)