मैं ग्रोक फिल्टर का उपयोग करके एक संस्करण स्ट्रिंग (जैसे 2.3.5) को तीन क्षेत्रों (major.minor.patch) में विभाजित करना चाहता हूं।

मैंने क्या प्रयास किया:

%{NUMBER:major}.%{NUMBER:minor}.%{NUMBER:patch}

ग्रोक डीबगर से परिणाम: No Matches

यहां छवि विवरण दर्ज करें जैसा मैं सोचा था:

{
    major: 2,
    minor: 3,
    patch: 5
}
2
Wenyi Li 24 अक्टूबर 2019, 10:15

1 उत्तर

सबसे बढ़िया उत्तर

संस्करण संख्या के भाग int मान हैं, इसलिए, NUMBER के बजाय INT का उपयोग करना समझ में आता है जो केवल पूर्णांक मानों से अधिक मेल खाता है।

इसके अलावा, डॉट को एक शाब्दिक बिंदु से मेल खाने के लिए बच जाना चाहिए।

उपयोग

%{INT:major}\.%{INT:minor}\.%{INT:patch}

परीक्षण:

enter image description here

अधिक विवरण:

पैटर्न logstash रिपॉजिटरी में उपलब्ध हैं:

INT (?:[+-]?(?:[0-9]+))
BASE10NUM (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))
NUMBER (?:%{BASE10NUM})

तो, ${NUMBER}... से जो पैटर्न निकलता है, वह है

(?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+))).(?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+))).(?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))

और यह इनपुट स्ट्रिंग से मेल नहीं खाता क्योंकि (?>...) परमाणु समूह डॉट से मेल खाता है एक फ्लोट नंबर के हिस्से के रूप में और इसे कभी वापस नहीं देता है क्योंकि परमाणु समूह पैटर्न में बैकट्रैकिंग की अनुमति नहीं है।

1
Wiktor Stribiżew 24 अक्टूबर 2019, 11:11