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