使用说明
fcp正则表达式
MCP服务器,用于通过命名片段组合构造正则表达式。
它的作用
LLM完全理解正则表达式语义——他们知道自己想要匹配什么。但它们在正则表达式语法上总是失败:不平衡的组、未转义的元字符、损坏的替换。fcp-regex通过让LLM使用平面元素语法通过命名片段构建正则表达式来解决这个问题。没有原始正则表达式,没有paren平衡,没有逃避负担。建立在 FCP 框架。
使用Rust编写 rmcp 用于MCP运输和 正则表达式语法 用于汇编。
快速示例
regex_session('new "Semver Parser" flavor:pcre')
regex([
"define digits any:digit+",
"define version digits lit:. digits lit:. digits",
"define prerelease lit:- chars:a-zA-Z0-9-.+",
"define semver version opt:prerelease",
"compile semver anchored:true"
])
生产: ^\d+\.\d+\.\d+(?:-[a-zA-Z0-9\-.]+)?$
regex_query('test semver against:1.2.3-alpha.1')
→ MATCH
regex_query('test semver against:v1.2')
→ NO MATCH
可用的MCP工具
| 工具 | 目的 |
|---|---|
regex(ops) |
批量突变——定义片段、导入模式、编译为正则表达式 |
regex_query(q) |
检查——显示、测试、解释、列出片段和库 |
regex_session(action) |
生命周期——新建、关闭、状态、撤消、重做 |
regex_help() |
完整参考卡 |
动词引用——变异
| 动词 | 语法 |
|---|---|
define |
define NAME ELEMENT [ELEMENT...] |
from |
from SOURCE [as:ALIAS] |
compile |
compile NAME [flavor:F] [anchored:bool] |
drop |
drop NAME |
rename |
rename OLD NEW |
动词引用——查询
| 动词 | 语法 |
|---|---|
show |
show NAME --片段树+编译正则表达式 |
test |
test NAME against:STRING --测试赛 |
list |
list --所有碎片 |
list library |
list library [category:NAME] --模式库 |
get |
get PATTERN --库模式细节 |
map |
map --片段+库概述 |
stats |
stats --会话统计 |
动词引用--会话
| 动词 | 语法 |
|---|---|
new |
new "Title" [flavor:pcre] |
close |
close |
status |
status |
undo |
undo [to:CHECKPOINT] |
redo |
redo |
checkpoint |
checkpoint NAME |
元素语法
| 元素 | 含义 | 示例 |
|---|---|---|
<name> |
引用另一个片段 | digits |
lit:<chars> |
文字(自动转义) | lit:. lit:@ |
any:<class><quant> |
角色类别 | any:digit+ |
none:<class><quant> |
否定类 | none:whitespace+ |
chars:<set><quant> |
自定义字符集 | chars:a-z0-9+ |
not:<set><quant> |
被否定的自定义集 | not:@/+ |
opt:<name> |
可选 | opt:prerelease |
alt:<a>|<b> |
交替 | alt:ipv4|ipv6 |
cap:<name> |
捕获组 | cap:domain |
cap:<label>/<name> |
命名捕获 | cap:port/digits |
sep:<name>/<lit> |
分开重复 | sep:octet/lit:. |
raw:<regex> |
原始正则表达式传递 | raw:(?<=\b) |
类: digit alpha alphanumeric word whitespace any
量词: + (1+) * (0+) ? (0..1) {N} {N,M} {N,}
模式库
56种精选模式,涵盖8个类别:uri、电子邮件、日期时间、标识符、网络、http、公共、数据。
regex(["from semver"])
regex_query('list library')
regex_query('get rfc3986:uri')
安装
从源代码构建
cargo install --git https://github.com/os-tack/fcp-regex
MCP客户端配置
{
"mcpServers": {
"fcp-regex": {
"command": "fcp-regex"
}
}
}
建筑
Cargo.toml Workspace root
├── src/ MCP server (fcp-regex binary + lib)
│ ├── main.rs Entry point — MCP stdio + Slipstream bridge
│ ├── bridge.rs Slipstream daemon connectivity
│ ├── mcp/server.rs RegexServer (4 rmcp tool handlers)
│ ├── fcpcore/ FCP framework (Rust port)
│ │ ├── tokenizer.rs DSL tokenizer
│ │ ├── parsed_op.rs Operation parser
│ │ ├── verb_registry.rs Verb spec registry
│ │ ├── event_log.rs Event sourcing (undo/redo)
│ │ ├── session.rs Session lifecycle
│ │ └── formatter.rs Response formatter
│ └── reference_card.rs Embedded reference card
│
└── fcp-regex-core/ Core library (no MCP dependencies)
└── src/
├── elements/ Element parser (lit:, any:, cap:, etc.)
├── domain/
│ ├── model.rs FragmentRegistry + RegexEvent
│ ├── compiler.rs Fragment graph → regex string
│ ├── mutation.rs define/from/compile/drop/rename handlers
│ └── query.rs show/test/list/get handlers
└── library/ 56 curated patterns (8 categories)
发展
cargo test # Run all tests
cargo build # Build binary
cargo clippy # Run lints
make help # Show Makefile targets
许可证
麻省理工学院
