Rust 正则表达式完全指南
Rust通过 regex
crate提供正则表达式支持。本指南将详细介绍Rust中正则表达式的使用方法、性能优化和最佳实践。
1. 基础知识
1.1 添加依赖
在 Cargo.toml
中添加:
[dependencies]
regex = "1.10.2"
1.2 基本使用
use regex::Regex;
fn main() {
// 创建正则表达式
let re = Regex::new(r"\d+").unwrap();
// 基本匹配
let text = "123 456 789";
// 检查是否匹配
assert!(re.is_match(text));
// 查找第一个匹配
if let Some(mat) = re.find(text) {
println!("Found match: {}", mat.as_str()); // "123"
}
// 查找所有匹配
for mat in re.find_iter(text) {
println!("Match: {}", mat.as_str());
}
}
1.3 编译时正则表达式
使用 lazy_static
优化性能:
use lazy_static::lazy_static;
use regex::Regex;
lazy_static! {
static ref EMAIL_RE: Regex = Regex::new(r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$").unwrap();
static ref PHONE_RE: Regex = Regex::new(r"^1[3-9]\d{9}$").unwrap();
}
fn is_valid_email(email: &str) -> bool {
EMAIL_RE.is_match(email)
}
fn is_valid_phone(phone: &str) -> bool {
PHONE_RE.is_match(phone)
}
2. 正则表达式语法
2.1 字符匹配
use regex::Regex;
fn main() {
let text = "Rust 2021 is awesome! Price: $99.99";
// 匹配数字
let digits = Regex::new(r"\d+").unwrap();
for mat in digits.find_iter(text) {
println!("Number: {}", mat.as_str());
}
// 匹配单词
let words = Regex::new(r"\w+").unwrap();
for mat in words.find_iter(text) {
println!("Word: {}", mat.as_str());
}
// 匹配空白字符
let spaces = Regex::new(r"\s+").unwrap();
let parts: Vec<&str> = spaces.split(text).collect();
println!("Parts: {:?}", parts);
// 自定义字符类
let vowels = Regex::new(r"[aeiou]").unwrap();
for mat in vowels.find_iter