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