6 个版本
0.2.4-alpha.1 | 2023年10月7日 |
---|---|
0.2.3 | 2023年7月24日 |
0.2.3-alpha.9 | 2023年6月10日 |
#466 in 数据库接口
75KB
1.5K SLoC
sqlite-regex
一个快速高效的 SQLite 正则表达式扩展。基于 sqlite-loadable-rs
和 regex crate。
详见 介绍 sqlite-regex:SQLite 最快的正则表达式扩展(2023年1月)了解更多细节!
如果你的公司或组织发现这个库很有用,请考虑 支持我的工作!
使用方法
.load ./regex0
select 'foo' regexp 'f';
在字符串中查找所有模式出现的实例
select regex_find(
'[0-9]{3}-[0-9]{3}-[0-9]{4}',
'phone: 111-222-3333'
);
-- '111-222-3333'
select rowid, *
from regex_find_all(
'\b\w{13}\b',
'Retroactively relinquishing remunerations is reprehensible.'
);
/*
┌───────┬───────┬─────┬───────────────┐
│ rowid │ start │ end │ match │
├───────┼───────┼─────┼───────────────┤
│ 0 │ 0 │ 13 │ Retroactively │
│ 1 │ 14 │ 27 │ relinquishing │
│ 2 │ 28 │ 41 │ remunerations │
│ 3 │ 45 │ 58 │ reprehensible │
└───────┴───────┴─────┴───────────────┘
*/
通过索引或名称提取捕获组值
select
regex_capture(captures, 0) as entire_match,
regex_capture(captures, 'title') as title,
regex_capture(captures, 'year') as year
from regex_captures(
regex("'(?P<title>[^']+)'\s+\((?P<year>\d{4})\)"),
"'Citizen Kane' (1941), 'The Wizard of Oz' (1939), 'M' (1931)."
);
/*
┌───────────────────────────┬──────────────────┬──────┐
│ entire_match │ title │ year │
├───────────────────────────┼──────────────────┼──────┤
│ 'Citizen Kane' (1941) │ Citizen Kane │ 1941 │
│ 'The Wizard of Oz' (1939) │ The Wizard of Oz │ 1939 │
│ 'M' (1931) │ M │ 1931 │
└───────────────────────────┴──────────────────┴──────┘
*/
使用 RegexSets 在线性时间内匹配字符串上的多个模式
select regexset_is_match(
regexset(
"bar",
"foo",
"barfoo"
),
'foobar'
)
根据给定的模式分隔符拆分字符串
select rowid, *
from regex_split('[ \t]+', 'a b c d e');
/*
┌───────┬──────┐
│ rowid │ item │
├───────┼──────┤
│ 0 │ a │
│ 1 │ b │
│ 2 │ c │
│ 3 │ d │
│ 4 │ e │
└───────┴──────┘
*/
将模式出现的实例替换为另一个字符串
select regex_replace(
'(?P<last>[^,\s]+),\s+(?P<first>\S+)',
'Springsteen, Bruce',
'$first $last'
);
-- 'Bruce Springsteen'
select regex_replace_all('a', 'abc abc', '');
-- 'bc bc'
文档
详见 docs.md
以获取完整的 API 参考。
安装
语言 | 安装 | |
---|---|---|
Python | pip install sqlite-regex |
|
Datasette | datasette install datasette-sqlite-regex |
|
Node.js | npm install sqlite-regex |
|
Deno | deno.land/x/sqlite_regex |
|
Ruby | gem install sqlite-regex |
|
Github 发布版 | ||
Rust | cargoadd sqlite-regex |
在 发布页面 中包含适用于 Linux x86_64、MacOS 和 Windows 的预构建二进制文件。
作为可加载扩展
如果您想将 sqlite-regex
作为 运行时加载扩展 使用,请从发布版下载 regex0.dylib
(MacOS)、regex0.so
(Linux)或 regex0.dll
(Windows)文件,并将其加载到您的 SQLite 环境中。
注意: 文件名中的
0
(regex0.dylib
/regex0.so
/regex0.dll
)表示sqlite-regex
的大版本号。目前sqlite-regex
预 v1,因此未来版本可能存在不兼容的变更。
例如,如果您使用的是 SQLite CLI,您可以像这样加载库
.load ./regex0
select regex_version();
-- v0.1.0
或者,在 Python 中使用内置的 sqlite3 模块
import sqlite3
con = sqlite3.connect(":memory:")
con.enable_load_extension(True)
con.load_extension("./regex0")
print(con.execute("select regex_version()").fetchone())
# ('v0.1.0',)
或者在 Node.js 中使用 better-sqlite3
const Database = require("better-sqlite3");
const db = new Database(":memory:");
db.loadExtension("./regex0");
console.log(db.prepare("select regex_version()").get());
// { 'regex_version()': 'v0.1.0' }
或者使用 Datasette
datasette data.db --load-extension ./regex0
支持
我(Alex 👋🏼)在这个项目上投入了大量的时间和精力,以及 许多其他开源项目。如果你的公司或组织使用这个库(或者你感到慷慨),那么请考虑 支持我的工作,或者与朋友分享这个项目!
另请参阅
- sqlite-xsv,一个用于处理 CSV 的 SQLite 扩展
- sqlite-loadable,一个用于编写 Rust SQLite 扩展的框架
- sqlite-http,一个用于发送 HTTP 请求的 SQLite 扩展
依赖项
约 15MB
约 286K SLoC