9个版本
0.3.0 | 2024年3月20日 |
---|---|
0.2.2 | 2023年5月23日 |
0.2.1 | 2021年3月5日 |
0.2.0 | 2020年11月26日 |
0.1.4 | 2020年7月22日 |
#178 in 文本处理
8,936 每月下载量
用于 lang_tester
42KB
899 行
fm
fm
是一个简单的非回溯模糊文本匹配器,用于匹配多行模式和文本。在最基本的情况下,通配符运算符 ...
(默认)可以按以下方式使用:
- 如果一行仅由
...
组成,它表示“匹配零或更多行文本”。 - 如果一行以
...
开头,则搜索不锚定到行的开头。 - 如果一行以
...
结尾,则搜索不锚定到行的结尾。
请注意,...
可以出现在行的开头和结尾,如果一行由 ......
(即以通配符开头和结尾,中间没有其他内容)组成,则它将匹配 exactly 一行。如果通配符运算符出现在任何其他位置,它将被字面匹配。通配符匹配不回溯,因此如果一行仅由 ...
组成,则下一个匹配行将锚定搜索的剩余部分。
以下示例展示了使用默认设置时 fm
的操作:
use fm::FMatcher;
assert!(FMatcher::new("a").unwrap().matches("a").is_ok());
assert!(FMatcher::new(" a ").unwrap().matches("a").is_ok());
assert!(FMatcher::new("a").unwrap().matches("b").is_err());
assert!(FMatcher::new("a\n...\nb").unwrap().matches("a\na\nb").is_ok());
assert!(FMatcher::new("a\n...\nb").unwrap().matches("a\na\nb\nb").is_err());
如果匹配失败,匹配器返回一个错误,指示匹配失败的行号。可以使用提供的 Display
实现对错误进行格式化,以便人类理解。
如果您想使用非默认选项,首先需要使用 FMBuilder
,然后再访问 FMatcher
。例如,要使用“名称匹配”(指定相同的文本块必须在文本的多个位置出现,但无需指定该块必须包含的内容),可以设置如下选项
use {fm::FMBuilder, regex::Regex};
let ptn_re = Regex::new(r"\$.+?\b").unwrap();
let text_re = Regex::new(r".+?\b").unwrap();
let matcher = FMBuilder::new("$1 $1")
.unwrap()
.name_matcher(ptn_re, text_re)
.build()
.unwrap();
assert!(matcher.matches("a a").is_ok());
assert!(matcher.matches("a b").is_err());
依赖项
~2.2–3MB
~53K SLoC