Rust中不区分大小写的字符串匹配

时间:2017-11-15 02:17:33

标签: string rust

是否有一种简单的方法可以使用str::matches 不区分大小写

2 个答案:

答案 0 :(得分:5)

您始终可以将两个字符串转换为相同的大小写。这适用于某些情况:

let needle = "μτς";
let haystack = "ΜΤΣ";

let needle = needle.to_lowercase();
let haystack = haystack.to_lowercase();

for i in haystack.matches(&needle) {
    println!("{:?}", i);
}

在其他情况下,正则表达式为您might do enough case-folding

extern crate regex;

use regex::RegexBuilder;

fn main() {
    let needle = "μτς";
    let haystack = "ΜΤΣ";

    let needle = RegexBuilder::new(needle)
        .case_insensitive(true)
        .build()
        .expect("Invalid Regex");

    for i in needle.find_iter(haystack) {
        println!("{:?}", i);
    }
}

但请记住,Rust的字符串 UTF-8 。是的,你需要处理所有的UTF-8。这意味着选择大写或小写可能会改变您的结果。同样,更改文本大小requires that you know the language of the text的唯一正确方法;它不是字节的固有属性。是的,你可以拥有包含表情符号和其他令人兴奋的事物的字符串beyond the Basic Multilingual Plane

另见:

答案 1 :(得分:1)

如果您正在使用the regex crate,则可以使模式不区分大小写:

let re = Regex::new(r"(?i)μτς").unwrap();
let mat = re.find("ΜΤΣ").unwrap();