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

如何编写正则表达式匹配逗号分隔的key:value键值对?Rust正则表达式实现方法

Rust正则表达式匹配无尾随逗号的键值对序列

最终正则表达式

r"^[^:,]+:[^,]+(?:,[^:,]+:[^,]+)*$"

正则表达式拆解

让我们逐个部分解析这个正则的逻辑,完全贴合你的需求:

  • ^ 和 $:锚定字符串的开头和结尾,强制正则匹配整个字符串,杜绝部分匹配的情况。
  • [^:,]+:匹配键部分。[^:,]表示匹配除冒号(:)和逗号(,)之外的任意ASCII字符,+限定符保证键至少有一个字符,满足“每个子序列均非空”的要求。
  • ::匹配键与值之间的固定分隔符。
  • [^,]+:匹配值部分。[^,]表示匹配除逗号之外的任意ASCII字符,+限定符保证值至少有一个字符,同样满足非空要求。
  • (?:,[^:,]+:[^,]+)*:这是一个非捕获组,用于匹配零个或多个后续键值对:
    • ,:仅在存在下一个键值对时出现,从根源上避免了尾随逗号的问题。
    • [^:,]+:[^,]+:和单个键值对的结构一致,确保后续每个键值对都符合规则。
    • *:允许零个后续键值对(即单个键值对场景,比如a:b),同时支持多键值对的情况。

测试示例

匹配成功的案例

  • 单个键值对:a:b
  • 多个键值对:a:b,c:d
  • 含特殊字符的键值对:hello:world!123,foo:bar@baz

匹配失败的案例

  • 值为空:a:
  • 键为空::b
  • 尾随逗号:a:b, 或 a:b,c:d,
  • 键包含逗号:a,b:c

Rust代码使用示例

先确保在Cargo.toml中添加regex依赖,然后可以这样使用:

use regex::Regex;

fn main() {
    // 编译正则表达式
    let key_value_re = Regex::new(r"^[^:,]+:[^,]+(?:,[^:,]+:[^,]+)*$").expect("Invalid regex");

    // 验证匹配场景
    assert!(key_value_re.is_match("a:b"));
    assert!(key_value_re.is_match("user:john_doe,email:john@example.com"));

    // 验证不匹配场景
    assert!(!key_value_re.is_match("invalid_key:,value"));
    assert!(!key_value_re.is_match("name:alice,"));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:02:30