如何在Rust中将输入设置为原始字符串?

时间:2016-06-17 19:31:11

标签: regex escaping rust rust-cargo

如何让Rust将文本输入解释为原始文字字符串?我正在尝试创建Regex搜索功能,我在其中使用正则表达式输入并使用它来搜索某些文本:

...

fn main() {
    // Initiate file to search through
    let text_path = Path::new("test.txt");
    let mut text_file = File::open(text_path).unwrap();
    let mut text = String::new();
    text_file.read_to_string(&mut text);

    // Search keyword
    let mut search_keyword = String::new();

    // Display filename and ask user for Regex
    print!("Search (regex) in file[{path}]: ", path=text_path.display());
    io::stdout().flush().ok();

    // Get search keyword
    io::stdin().read_line(&mut search_keyword).unwrap();
    println!("You are searching: {:?}", search_keyword);

    let search = to_regex(&search_keyword.trim()).is_match(&text);

    println!("Contains search term: {:?}", search);
}

fn to_regex(keyword: &str) -> Regex {
    Regex::new(keyword).unwrap()
}

Rust会自动转义输入,因此我无法将其用于Regex。我知道你可以为字符串做这个:

r"Some text here with with escaping characters: \ "

但是如何将其与变量一起使用?

1 个答案:

答案 0 :(得分:3)

  

Rust会自动转义输入

不,它没有。对于系统语言来说,这将是一个非常奇怪的决定。这是我构建的MCVE

http://localhost:9200/myindex/<type>/_search

它运行的一个例子:

extern crate regex;

use std::io;
use regex::Regex;

static TEXT: &'static str = "Twas the best of times";

fn main() {
    let mut search_keyword = String::new();
    io::stdin().read_line(&mut search_keyword).unwrap();
    println!("You are searching: {:?}", search_keyword);

    let regex = Regex::new(search_keyword.trim()).unwrap();

    let matched = regex.is_match(TEXT);
    println!("Contains search term: {:?}", matched);
}

也许调试格式字符串($ cargo run Running `target/debug/searcher` Tw.s You are searching: "Tw.s\n" Contains search term: true )的使用令人困惑?使用Debug特征进行格式化,该特征会转义字符串中的非ASCII字符。