You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust如何用regex替换冒号与@之间的端口,解决\K转义无效问题

问题原因

Rust 官方 regex 库基于 RE2 正则引擎,原生不支持 \K 语法,这是你触发转义序列无效报错的根本原因。
另外你提供的示例代码中 let ip = "172.20.0.3:6379@16379" 行末尾缺少分号,编译时也会触发语法错误,记得补上。

可用实现方案

两种常用实现方式可满足需求,你可以根据习惯选择:

方案1:使用固定长度零宽后发断言(和你原逻辑效果一致)

利用 RE2 支持的固定长度正向回顾断言替代\K的功能,不需要调整替换逻辑:

use regex::Regex;

fn main() {
    let ip = "172.20.0.3:6379@16379";
    // (?<=:) 匹配前缀为冒号的位置,后续匹配到@之前的内容即为要替换的端口
    let re = Regex::new(r"(?<=:)[^@]+").unwrap();
    let new_ip = re.replace(ip, "1234");
    println!("{}", new_ip); // 输出 172.20.0.3:1234@16379
}

方案2:使用捕获组(兼容性更强)

通过捕获组保留不需要替换的前后部分,替换时直接复用捕获内容即可:

use regex::Regex;

fn main() {
    let ip = "172.20.0.3:6379@16379";
    // 两个捕获组分别保留冒号前的内容、@及之后的内容
    let re = Regex::new(r"(.*:)[^@]+(@.*)").unwrap();
    // 注意捕获组序号用大括号包裹,避免和后续端口数字混淆
    let new_ip = re.replace(ip, "${1}1234${2}");
    println!("{}", new_ip); // 输出 172.20.0.3:1234@16379
}

内容的提问来源于stack exchange,提问作者cactus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:24:07