Rust 迭代器、惰性和所有权

Rust 迭代器、惰性和所有权,rust,Rust,我开始用铁锈,我正在玩板条箱,这样我可以创造一个lexer lexer使用一个大型正则表达式,其中包含一组命名的捕获组。我试图获取正则表达式的结果,并创建捕获名称和捕获值的Vec,但在映射和过滤结果时,我不断遇到关于迭代返回的值的生命周期的问题 我认为这与懒惰和迭代器在超出范围时没有被使用有关,但我不确定如何实际解决这个问题 extern crate regex; use regex::Regex; fn main() { // Define a regular expression

我开始用铁锈,我正在玩板条箱,这样我可以创造一个lexer

lexer使用一个大型正则表达式,其中包含一组命名的捕获组。我试图获取正则表达式的结果,并创建捕获名称和捕获值的
Vec
,但在映射和过滤结果时,我不断遇到关于迭代返回的值的生命周期的问题

我认为这与懒惰和迭代器在超出范围时没有被使用有关,但我不确定如何实际解决这个问题

extern crate regex;

use regex::Regex;

fn main() {
    // Define a regular expression with a bunch of named capture groups
    let expr = "((?P<num>[0-9]+)|(?P<str>[a-zA-Z]+))";
    let text = "0ab123cd";
    let re = Regex::new(&expr).unwrap();

    let tokens: Vec<(&str, &str)> = re.captures_iter(text)
        .flat_map(|t| t.iter_named())
        .filter(|t| t.1.is_some())
        .map(|t| (t.0, t.1.unwrap()))
        .collect();

    for token in tokens {
        println!("{:?}", token);
    }
}

这种情况的限制点是
.iter\u named()
方法:

fn iter_named(&'t self) -> SubCapturesNamed<'t>
fn iter_named(&'t self) -> SubCapturesNamed<'t>
let captures = re.captures_iter(text).collect::<Vec<_>>();
let tokens: Vec<(&str, &str)> = captures.iter()
    .flat_map(|t| t.iter_named())
    .filter(|t| t.1.is_some())
    .map(|t| (t.0, t.1.unwrap()))
    .collect();