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

Ala*_*agi 5 string rust

有没有一种区分大小写的简单方法?str::matches

Rum*_*iat 8

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

\n
let re = Regex::new("(?i)\xce\xbc\xcf\x84\xcf\x82").unwrap();\nlet mat = re.find("\xce\x9c\xce\xa4\xce\xa3").unwrap();\n
Run Code Online (Sandbox Code Playgroud)\n


She*_*ter 5

您始终可以将两个字符串都转换为相同的大小写。这将在某些情况下有效:

let needle = "???";
let haystack = "???";

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

for i in haystack.matches(&needle) {
    println!("{:?}", i);
}
Run Code Online (Sandbox Code Playgroud)

在其他情况下,正则表达式板条箱可以为您完成足够的大小写折叠

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,请记住,最终Rust的字符串是UTF-8。是的,您需要处理所有UTF-8。这意味着选择大写或小写可能会更改结果。同样,更改文本大小写的唯一正确方法是要求您知道文本的语言。它不是字节的固有属性。是的,您可以使用包含表情符号和基本多语言平面之外的其他令人兴奋的东西的字符串。

也可以看看:

  • 我知道它的意思不是这样的,但是诸如“基本多语言平面之外的其他令人兴奋的事情”之类的陈述确实具有某种洛夫克拉夫特式的含义。好像弦乐就像旧神一样,超出了人类的理解范围,而深入研究它们的_真正_理解会让你发疯。在 Rust 书向我介绍了字素簇的概念之后……我有点同意! (10认同)