如何简单地使用str::matches
进行不区分大小写地匹配?
你可以将两个字符串都转换为相同的大小写。这对某些情况有效:
let needle = "μτς";
let haystack = "ΜΤΣ";
let needle = needle.to_lowercase();
let haystack = haystack.to_lowercase();
for i in haystack.matches(&needle) {
println!("{:?}", i);
}
另请参阅str::to_ascii_lowercase
获取仅限 ASCII 的变体。
在其他情况下,正则表达式包可能已经足够忽略大小写(可能是Unicode),这取决于你的需求:
use regex::RegexBuilder; // 1.4.3
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。这意味着选择大写或小写可能会改变你的结果。同样,更改文本大小写的唯一正确方法需要知道文本的语言;它不是字节的固有属性。是的,你可以有包含表情符号和其他令人兴奋的东西超出基本多语言平面的字符串。
另见:
let re = Regex::new("(?i)μτς").unwrap();
let mat = re.find("ΜΤΣ").unwrap();
fn to_lowercase(&self) -> String
将两个字符串先转换为小写。 - ChickenFeetmatches(...).count()
- Shepmaster