2 个不稳定版本
0.2.0 | 2022年6月11日 |
---|---|
0.1.0 | 2021年6月22日 |
#699 在 编码
2,295 每月下载量
用于 4 个crate(3个直接使用)
38KB
661 行
fnmatch-regex - 构建匹配 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_regex::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.6–3.5MB
约 63K SLoC