Rust中的正则表达式:初学者完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Rust中正则表达式入门



正则表达式(regex)是一种根据给定模式搜索、提取和替换文本的强大工具。在Rust中,处理正则表达式使用的是regex crate——生态系统中流行且高性能的库之一。本文将从安装到实际示例,全面讲解Rust中regex的基础用法。



为什么要学习Rust中的正则表达式?该语言提供了安全且快速的文本处理能力,而regex crate保证了无内存泄漏和高执行速度。这使得Rust成为日志解析、表单验证、配置文件处理等任务的绝佳选择。



安装并引入regex crate



首先,在您的Cargo.toml文件中添加regex依赖:



[dependencies]regex = "1.10"


然后在代码中导入该模块:



use regex::Regex;


您将使用的主要结构是Regex。可以通过Regex::new()方法创建实例,该方法返回Result,因为模式可能无效。



fn main() {    let re = Regex::new(r"^\\d{3}-\\d{2}-\\d{4}$").unwrap();    println!("Regex已创建: {}", re.as_str());}


注意:模式使用原始字符串(r"...")编写,以避免转义反斜杠。



正则表达式的基本操作



1. 检查匹配:is_match



is_match方法在字符串中找到模式时返回true:



use regex::Regex;

fn main() { let re = Regex::new(r"hello").unwrap(); let text = "hello world"; if re.is_match(text) { println!("找到匹配!"); } else { println!("无匹配"); }}


输出:找到匹配!



2. 查找第一个匹配:find



find方法返回Option<Match>——包含位置信息的第一个匹配:



use regex::Regex;

fn main() { let re = Regex::new(r"\\d+").unwrap(); let text = "代码: 12345, 价格: 678"; if let Some(m) = re.find(text) { println!("找到: '{}' (位置 {}..{})", m.as_str(), m.start(), m.end()); }}


输出:找到: '12345' (位置 5..10)



3. 查找所有匹配:find_iter



使用迭代器find_iter获取所有匹配:



use regex::Regex;

fn main() { let re = Regex::new(r"\\d+").unwrap(); let text = "数字: 42, 100, 7"; for m in re.find_iter(text) { println!("数字: {}", m.as_str()); }}


输出:

数字: 42数字: 100数字: 7


4. 提取分组:captures



模式中的分组(用圆括号表示)允许提取匹配的部分:



use regex::Regex;

fn main() { let re = Regex::new(r"(\\w+)@(\\w+)\\.(\\w+)").unwrap(); let email = "user@example.com"; if let Some(caps) = re.captures(email) { println!("完整邮箱: {}", &caps[0]); println!("用户名: {}", &caps[1]); println!("域名: {}", &caps[2]); println!("顶级域: {}", &caps[3]); }}


输出:

完整邮箱: user@example.com用户名: user域名: example顶级域: com


实用示例



示例1:电话号码验证



检查字符串是否符合俄罗斯号码格式(例如,+7-XXX-XXX-XX-XX):



use regex::Regex;

fn v

博客

书籍推荐