fcp正则表达式
MCP服务器,用于通过命名片段组合构造正则表达式。
它的作用
LLM完全理解正则表达式语义——他们知道自己想要匹配什么。但它们在正则表达式语法上总是失败:不平衡的组、未转义的元字符、损坏的替换。fcp-regex通过让LLM使用平面元素语法通过命名片段构建正则表达式来解决这个问题。没有原始正则表达式,没有paren平衡,没有逃避负担。建立在 FCP 框架。
快速示例
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 |
元素语法
| 元素 | 含义 | 示例 | ||
|---|---|---|---|---|
| `` | 引用另一个片段 | digits | ||
lit: | 文字(自动转义) | lit:. lit:@ | ||
any: | 角色类别 | any:digit+ | ||
none: | 否定类 | none:whitespace+ | ||
chars: | 自定义字符集 | chars:a-z0-9+ | ||
not: | 被否定的自定义集 | not:@/+ | ||
opt: | 可选 | opt:prerelease | ||
| `alt:\ | ` | 交替 | `alt:ipv4\ | ipv6` |
cap: | 捕获组 | cap:domain | ||
cap:/ | 命名捕获 | cap:port/digits | ||
| `sep:/ | ||||
| ` | 分开重复 | sep:octet/lit:. | ||
raw: | 原始正则表达式传递 | 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-regexMCP客户端配置
{
"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许可证
麻省理工学院
