代码之家  ›  专栏  ›  技术社区  ›  jagamot

REG EX匹配STATSD格式

  •  1
  • jagamot  · 技术社区  · 6 年前

    我使用以下REG EX来匹配statsd数据格式-

    ^[\w.]+:.+\|.\|#(?:[\w.]+:[^,\n]+(?:,|$))*$
    

    这满足以下任何格式-

    performance.os.disk:1099511627776|g|#region:us-west-1,datacenter:us-west-1a
    

    performance.os.disk:1099511627776|g|#
    

    performance.os.disk:1099511627776|g|#region:us-west-1
    

    但我无法与之抗衡-

    datastore.reads:9876|ms
    

    有什么帮助吗?

    regex 101尝试- https://regex101.com/r/H8vQTa/1/

    1 回复  |  直到 6 年前
        1
  •  3
  •   Wiktor Stribiżew    6 年前

    你可以用

    ^[\w.]+:[^|]+\|[^|]+(?:\|#(?:[\w.]+:[^,\n]+(?:,|$))*)?$
                   ^^^^^^^^                             ^^
    

    regex demo

    关键是你只匹配 . 介于两者之间 | S,我建议匹配一个或多个字符,而不是 | 在那里,通过包装使其余的可选 \|#(?:[\w.]+:[^,\n]+(?:,|$))* 在可选的非捕获组中, (?:...)? 是的。

    细节

    • ^ -字符串开头
    • [\w.]+ -1+字或 是的。 字符
    • : -结肠
    • [^|]+ -与1+non匹配的反字符类- | 字符
    • \| -一个 | 烧焦
    • [^]]+ -1+字符 |
    • (?:\|#(?:[\w.]+:[^,\n]+(?:,|$))*)? -一个可选的非捕获组,与
      • \|# - |# 子串
      • (?:[\w.]+:[^,\n]+(?:,|$))* -连续重复0次或多次
        • [\w.]+: -1+字或 是的。 然后是chars :
        • [^,\n]+ -除了lf以外的1+字符(我猜这里是用来调试的)和 ,
        • (?:,|$) - , 或字符串结尾
    • $ -字符串结束。