Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sqlite3中用REGEXP替换字符串的一部分_Regex_Sqlite_Pcre - Fatal编程技术网

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

在sqlite3中用REGEXP替换字符串的一部分,regex,sqlite,pcre,Regex,Sqlite,Pcre,我使用安装了REGEX支持 apt-get install sqlite3 sqlite3-pcre 现在我可以在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]+$'" 但

我使用安装了REGEX支持

apt-get install sqlite3 sqlite3-pcre
现在我可以在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]+$'"

但是如何使用regex用sqlite查询更新字符串?

默认情况下,sqlite不提供regex\u replace函数。您需要将其作为扩展加载。下面是我如何做到这一点的

使用

gcc --shared -fPIC -I sqlite-autoconf-3071100 icu_replace.c -o icu_replace.so
在SQLITE3RUNN中,以下命令所述的命令已经运行并创建了一个文件icu_replace.so

SELECT load_extension(' path to icu_replace.so', 'sqlite3_extension_init') from dual;
在此之后,您将能够使用以下功能:-

select regex_replace('\bThe\b',x,'M') from dual;

下面构建了具有动态库支持的最新sqlite,并编译和。它还假定基于debian的linux是分布式的:

sudo apt build dep sqlite3获取依赖项以编译sqlite3 mkdir sqlite编译 cd sqlite编译 wget-O sqlite.tar.gzhttps://www.sqlite.org/src/tarball/sqlite.tar.gz?r=release tar xzf sqlite.tar.gz mkdir构建 光盘制作 ../sqlite/configure make OPTS='-DSQLITE\u启用\u加载\u扩展'
./sqlite3-cmd'pragma compile_options;'你是说像regexp\u replace这样的东西?是的。就像那样。你能接受这个答案吗?这样人们就会发现它对他们的情况很有帮助。答案很好,但我没能让它发挥作用。让它编译并加载扩展,但regex_replace函数似乎总是返回第二个参数。@KevinRoth嗨kevin,很抱歉输入错误,请这样使用-从dual中选择regex_replace'\b',x,'M';我还编辑了答案。@Rubo你好,Rubo,请您接受答案,以便对具有相同查询的其他用户有所帮助。