Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Rust中,文本字符串和Args之间有什么区别?_Rust - Fatal编程技术网

在Rust中,文本字符串和Args之间有什么区别?

在Rust中,文本字符串和Args之间有什么区别?,rust,Rust,我有一个使用regex的字符串解析函数:fn parse(s:&str)->Option。它在使用parse(“测试字符串”)进行测试时工作。但在使用Args时失败。失败的原因是正则表达式无法匹配s中的任何内容 我使用Args的方式是:Args().map(|arg | parse(&arg)).collect()。我在这里看不到类型错误。而parse中的println显示s与“测试字符串”是相同的字符串 更新了我的描述。我不确定我的问题是否与String和str的不同有关。因为我使用了str

我有一个使用regex的字符串解析函数:
fn parse(s:&str)->Option
。它在使用
parse(“测试字符串”)
进行测试时工作。但在使用
Args
时失败。失败的原因是正则表达式无法匹配
s
中的任何内容

我使用
Args
的方式是:
Args().map(|arg | parse(&arg)).collect()
。我在这里看不到类型错误。而
parse
中的
println
显示
s
与“测试字符串”是相同的字符串


更新了我的描述。我不确定我的问题是否与String和str的不同有关。因为我使用了
str
,但还是失败了

extern板条箱正则表达式;
使用regex::regex;
使用std::env::args;
结构IPRange{
起点:u32,
掩码:u8,
}
fn parse_iprange(ipr:&str)->选项{
让parser=Regex::new(
r“^(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})/(\d+\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})$”,
)
.unwrap();
让caps=parser.captures(ipr.unwrap();
返回一些(IPRange{start:0,mask:0});
}
fn main(){
设v:Vec=args().map(| arg | parse_iprange(&arg)).collect();
}
$RUST\u BACKTRACE=1货物运行192.168.3.1/24
在0.04秒内完成开发[未优化+调试信息]目标
正在运行'target/debug/ip_helper 192.168.3.1/24`
线程'main'在'None'值'src/libcore/Option.rs:345:21'上调用'Option::unwrap()
堆栈回溯:
0:std::sys::unix::backtrace::tracing::imp::unwind\u backtrace
在src/libstd/sys/unix/backtrace/tracing/gcc_.s.rs:39
1:std::sys_common::backtrace::\u打印
在src/libstd/sys_common/backtrace.rs:70
2:std::panicking::default_hook::{{closure}
在src/libstd/sys_common/backtrace.rs:58
在src/libstd/panicking.rs:200
3:std::panicking::default\u hook
在src/libstd/panicking.rs:215
4:std::恐慌::生锈\u恐慌\u带钩
在src/libstd/panicking.rs:478
5:std::恐慌::继续恐慌\u fmt
在src/libstd/panicking.rs:385
6:生锈\u开始\u放松
在src/libstd/panicking.rs:312
7:核心::恐慌::恐慌
在src/libcore/panicking.rs:85
8:核心::恐慌::恐慌
在src/libcore/panicking.rs:49
9:::展开
at/rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858/src/libcore/macros.rs:10
10:ip\U帮助程序::解析\U iprange
在src/main.rs:18
第一项是实施行为:

第一个元素传统上是可执行文件的路径,但它可以设置为任意文本,甚至可能不存在。这意味着不应将该财产用于安全目的

因此,在您的案例中,您应该跳过它:

让v:Vec=args().跳过(1).map(|arg | parse_iprange(&arg)).collect();
第一项是实施行为:

第一个元素传统上是可执行文件的路径,但它可以设置为任意文本,甚至可能不存在。这意味着不应将该财产用于安全目的

因此,在您的案例中,您应该跳过它:

让v:Vec=args().跳过(1).map(|arg | parse_iprange(&arg)).collect();

@Stargateur已更新。谢谢如果我将
main
中的唯一一行替换为
parse_iprange(“192.168.3.1/24”)
,则该行有效。@Stargateur更新。谢谢如果我将
main
中的唯一一行替换为
parse_iprange(“192.168.3.1/24”)
,它就会工作。