String 如何进一步处理匹配字符串?

String 如何进一步处理匹配字符串?,string,rust,match,String,Rust,Match,我正在逐行读取一些文件,并希望匹配每一行,以验证它是否包含特定的字符串 到目前为止,我所拥有的: // read file line by line let file = File::open(file_path).expect("Cannot open file"); let buffer = BufReader::new(file); for line in buffer.lines() { // println!("{:?}", line.unwrap()); parse_

我正在逐行读取一些文件,并希望匹配每一行,以验证它是否包含特定的字符串

到目前为止,我所拥有的:

// read file line by line
let file = File::open(file_path).expect("Cannot open file");
let buffer = BufReader::new(file);
for line in buffer.lines() {
    // println!("{:?}", line.unwrap());
    parse_line(line.unwrap());

}

fn parse_line(line: String) {
    match line {
        (String) if line.contains("foo") => print!("function head"),
        _ => print!("function body"),
    }
}
这导致:

错误:应为`、`或`@`、找到`)之一`
-->src/main.rs:13:20
|
13 |(字符串)如果line.contains(“foo”)=>打印!(“职能负责人”),
|^此处应为“、”或“@”之一
我是否可以使用
match
检查不同的包含字符串,就像在其他情况下使用
switch
一样

例如:

fn parse_line(line: String) {
    match line {
        line.contains("foo") => print!("function foo"),
        line.contains("bar") => print!("function bar"),
        _ => print!("function body"),
    }
}

匹配中使用
if
,称为:

这不是生锈。Rust中没有这样的语法

use std::fs::File;
use std::io::{self, BufReader, BufRead};

fn main() -> io::Result<()> {
    let file_path = "foo.txt";
    // read file line by line
    let file = File::open(file_path)?;
    let reader = BufReader::new(file);

    for line in reader.lines() {
        parse_line(line?);
    }

    Ok(())
}

fn parse_line(line: String) {
    match &line {
        s if s.contains("foo") => print!("contains foo"),
        s if s.contains("bar") => print!("contains bar"),
        _ => print!("other"),
    }
}