2016-06-17 12 views
-1

Wie kann ich Rust interpretieren eine Texteingabe als eine rohe literale Zeichenfolge? Ich versuche, eine Regex Suchfunktion zu machen, wo ich eine reguläre Ausdruck Eingabe nehmen und es verwendet, durch einen Text suchen:Wie wird die Eingabe als rohe Zeichenfolge in Rust festgelegt?

... 

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 automatisch entkommt den Eingang, so dass ich es nicht für Regex verwenden kann. Ich weiß, dass Sie dies für eine Zeichenfolge tun können:

Aber wie kann ich das mit einer Variablen verwenden?

+0

Vielleicht versuchen, 'r #" somestring "#' ... –

Antwort

3

Rust automatisch entkommt dem Eingang

Nein, tut es nicht. Das wäre eine sehr merkwürdige Entscheidung für eine Systemsprache. Hier ist die MCVE, die ich gebaut:

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); 
} 

Und ein Beispiel dafür läuft:

$ cargo run 
    Running `target/debug/searcher` 
Tw.s 
You are searching: "Tw.s\n" 
Contains search term: true 

Vielleicht ist die Verwendung des Debug-Format-String ({:?}) ist verwirrend? Dieses Format verwendet das Merkmal Debug, das Nicht-ASCII-Zeichen in Zeichenfolgen ausblendet.

Verwandte Themen