正则表达式以匹配statsD格式

时间:2018-07-05 10:27:22

标签: java regex statsd

我正在使用以下正则表达式来匹配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 个答案:

答案 0 :(得分:3)

您可以使用

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

请参见regex demo

重点是,您只能将两个.之间的|字符匹配,我建议在那里匹配|以外的1个或多个字符,并通过包装使其余字符可选\|#(?:[\w.]+:[^,\n]+(?:,|$))*在可选的非捕获组(?:...)?中。

详细信息

  • ^-字符串的开头
  • [\w.]+-1个以上的单词或.个字符
  • :-冒号
  • [^|]+-匹配1个以上非|字符的否定字符类
  • \|-一个|字符
  • [^|]+-除|以外的1个以上的字符
  • (?:\|#(?:[\w.]+:[^,\n]+(?:,|$))*)?-一个可选的非捕获组,匹配出现1或0次
    • \|#-|#子字符串
    • (?:[\w.]+:[^,\n]+(?:,|$))*-的0个或多个连续重复
      • [\w.]+:-1个以上的单词或.个字符,然后是:
      • [^,\n]+-除LF(我想这里用于调试目的)和,
      • 之外的1个以上字符
      • (?:,|$)-,或字符串结尾
  • $-字符串的结尾。