1 个不稳定版本
| 0.3.0 | 2023年12月21日 |
|---|
#1235 在 编码
493 次每月下载
用于 pks
39KB
673 行
fnmatch-regex2 - 构建匹配glob风格模式的正则表达式
此crate目前提供了一个函数 glob_to_regex,该函数可以将带有一些shell扩展的glob风格模式转换为正则表达式。注意,它仅处理文本模式匹配,没有任何尝试验证或构建任何文件系统路径。
当前支持的glob风格模式特性包括
-
除了
?、*、[、\或{之外的任何字符都会被字面匹配 -
?匹配除斜杠 (/) 之外的任何单个字符 -
*匹配不包含斜杠 (/) 的零个或多个字符序列 -
反斜杠允许匹配下一个字符,但不是
\a、\b、\e、\n、\r和\v等序列 -
[...]字符类支持范围、如果第一个字符是!则支持否定、反斜杠转义,并且如果它是第一个字符,还可以匹配一个]字符(例如,[]]将仅匹配单个]字符) -
{a,bbb,cc}选择支持反斜杠转义,但不支持嵌套选择或字符类
请注意,通配符模式 * 和 ?,以及字符类,永远不会匹配斜杠。
示例
-
代码
abc.txt只会匹配abc.txt -
代码
foo/test?.txt会匹配例如foo/test1.txt或foo/test".txt,但不匹配foo/test/.txt -
代码
/etc/c[--9].conf会匹配例如/etc/c-.conf、/etc/c..conf或/etc/7.conf,但不匹配/etc/c/.conf -
代码
linux-[0-9]*-{generic,aws}会匹配例如linux-5.2.27b1-generic和linux-4.0.12-aws,但不匹配linux-unsigned-5.2.27b1-generic
请注意,字符类的否定修饰符是!,而不是^。
let re_name = fnmatch_regex2::glob_to_regex("linux-[0-9]*-{generic,aws}")?;
for name in &[
"linux-5.2.27b1-generic",
"linux-4.0.12-aws",
"linux-unsigned-5.2.27b1-generic"
] {
let okay = re_name.is_match(name);
println!(
"{}: {}",
name,
match okay { true => "yes", false => "no" },
);
assert!(okay == !name.contains("unsigned"));
}
依赖关系
约2.5–3.5MB
约62K SLoC