在Rust中如何使用正则表达式实现从右侧查找的rfind功能?
Rust 正则rfind最简实现方案
直接使用regex库内置的find_iter方法迭代所有匹配项,取最后一项即可实现和rfind完全一致的效果,不需要手动反转正则表达式、也不需要生成反转字符串,代码可读性和性能都更优。
示例代码如下:
#[static_init::dynamic] static r: Regex = regex::Regex::new(r"a\d").unwrap(); let s = "123a123a456"; if let Some(last_match) = r.find_iter(s).last() { println!("start: {:#?}", last_match.start()); println!("end: {:#?}", last_match.end()); }
以上代码输出结果和你原来的反转方案完全一致,无需修改原有正则表达式,也没有额外的字符串分配开销。如果是处理超长字符串且匹配项极多的极端场景,再考虑反转方案即可,普通业务场景下该方法是最优选择。
内容的提问来源于stack exchange,提问作者Just a learner
相关产品推荐
相关产品推荐

