Reg-ex для соответствия statsD Формат - PullRequest
0 голосов
/ 05 июля 2018

Я использую следующий 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 Ответ

0 голосов
/ 05 июля 2018

Вы можете использовать

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

См. Демоверсию regex

Суть в том, что вы сопоставляете любой символ с . между двумя | с, я предлагаю сопоставить 1 или более символов, отличных от |, и оставьте необязательные остальные, заключив \|#(?:[\w.]+:[^,\n]+(?:,|$))* в необязательный группа без захвата, (?:...)?.

Детали

  • ^ - начало строки
  • [\w.]+ - 1+ слово или . символы
  • : - двоеточие
  • [^|]+ - класс отрицанных символов, соответствующий 1+ не- | символам
  • \| - | char
  • [^|]+ - 1+ символов, кроме |
  • (?:\|#(?:[\w.]+:[^,\n]+(?:,|$))*)? - необязательная группа без захвата, соответствующая 1 или 0 вхождениям
    • \|# - |# подстрока
    • (?:[\w.]+:[^,\n]+(?:,|$))* - 0 или более последовательных повторений
      • [\w.]+: - 1+ слово или . символов, а затем :
      • [^,\n]+ - 1+ символов, отличных от LF (я полагаю, он используется здесь для целей отладки) и ,
      • (?:,|$) - , или конец строки
  • $ - конец строки.
...