2017-01-31 5 views
5
ab1-cde23-fg45-h6-ijk-789.lmn.local.  86400 IN A 12.34.5.123 

अनुसरण DNS प्रविष्टि में, मैं h6 सेक्शन (स्थिति 4) से मिलान करने का प्रयास कर रहा हूं। इस बिंदु पर, मैं जानता हूँ कि डोमेन के इस खंड केवल 2 अक्षर/अंक या प्रत्येक में से एक से बना है, इसलिए मैं यहregex - पैटर्न के एक्स घटनाओं के बाद एक सबस्ट्रिंग से कैसे मिलान करें?

"-[a-zA-Z0-9]{2}-" 

साथ मिलान कर सकते हैं (एक अनाड़ी तरीके से) एक मामले में जहां मैं कर सकता यह मानें कि यह 2 अक्षरों/अंकों वाले डोमेन का एकमात्र भाग है, मैं - से कम से कम चौथी स्थिति की सामग्री से कैसे मेल खाता हूं? (ab1 जा रहा है पहले की स्थिति, cde23 दूसरा, और इतने पर, सभी पदों - द्वारा अलग)

मैं निम्नलिखित regex से 4 थी पदों से मेल करने में सक्षम हूँ, लेकिन यह से सब कुछ शामिल है प्रारंभ।

"([a-zA-Z0-9]*-){3}[a-zA-Z0-9]*-" 

मैं गोलांग में रेसएक्सपी का उपयोग कर रहा हूं।

+1

regex की आवश्यकता है? विभाजन क्यों नहीं करें और फिर सरणी से चौथा तत्व चुनें? –

+0

मैं स्ट्रिंग को विभाजित करके वास्तव में इसे कर सकता था, लेकिन मैं यह देखने के लिए उत्सुक था कि रेगेक्स के साथ यह कैसे प्राप्त किया जा सकता है :-) – Cocotton

उत्तर

6

है:

^(?:[^-]+-){3}([^-]+) 
  • ^(?:[^-]+-){3} मैचों - पहले 3 क्षेत्रों अलग, (?:) समूह गैर पर कब्जा करने

  • पर कब्जा कर लिया समूह, ([^-]+)- अलग 4 क्षेत्र में शामिल होंगे बनाता है।

Demo


हम इस पर हैं, तब तक आप शायद महंगा Regex कार्यान्वयन स्ट्रिंग परिवर्तन के बजाय पर गौर करना चाहिए, सादे strings.Split() करना चाहिए:

package main 

import (
    "fmt" 
    "strings" 
) 

func main() { 
    s := "ab1-cde23-fg45-h6-ijk-789.lmn.local.  86400 IN A 12.34.5.123" 
    fmt.Println(strings.Split(s, "-")[3]) 
} 
+0

यह काम करता है! मुझे समूहों के साथ कुछ परेशानी थी, जिसने मुझे बेहतर तरीके से समझने में मदद की! – Cocotton

+0

@ कोकटन ग्रेट। मेरे संपादन भी जांचें; मुझे लगता है कि स्ट्रिंग मैनिपुलेशन इस मामले में आपको क्या करना चाहिए। – heemayl

+0

हां वास्तव में अच्छा काम करेगा! लेकिन मैं स्वीकार करूंगा कि मैंने सोचा था कि रेगेक्स सीधे स्ट्रिंग मैनिप्लेशंस से तेज होगा। बहुत दिलचस्प, धन्यवाद! – Cocotton

संबंधित मुद्दे