2016-02-29 7 views
8

मैं एक डॉकर प्रोजेक्ट विकसित कर रहा हूं, रिपोजिटरी नाम की जांच करने के लिए रेगेक्स लिखने की आवश्यकता है। आवश्यकता के अनुसार आवश्यकता:regex {m, n} और (regex) {m, n} के बीच क्या अंतर है?

  1. में केवल ASCII गुणक शामिल हैं, अपकेस को छोड़ दें।
  2. विशेष गुणक डॉट (।), हाइफ़न (-) और अंडरलाइन (_) को छोड़कर बहिष्कृत करते हैं।
  3. केवल वर्णमाला और संख्या के साथ शुरू होता है और इसके साथ समाप्त होता है।
  4. विशेष गुणक लगातार दिखाई नहीं दे सकते हैं।
  5. लंबाई सीमा (मिनट: 2, अधिकतम: 255)

तो, मेरे regex है:

([a-z0-9]+(?:[._-][a-z0-9]+)*){2,255} 

लेकिन, यह ठीक है, जब भंडार नाम e-e_1.1

है नहीं किया जा सकता

जब मैं इसे बदलता हूं:

[a-z0-9]+(?:[._-][a-z0-9]+)*{2,255} 

यह ठीक है।

क्या कोई व्यक्ति समझा सकता है? पहले ही, आपका बहुत धन्यवाद।

+0

'regex {m, n}' match "rege" के बाद 'm' से' n' times "x" वर्ण, '(regex) {m, n}' match "regexregexregex..regex" ('m 'से' n' बार) – Maroun

+0

@MarounMaroun regex एक नियमित अभिव्यक्ति निर्दिष्ट करता है, "regex" – xautjzd

उत्तर

8

([a-z0-9]+(?:[._-][a-z0-9]+)*){2,255} रेगेक्स में, सीमित मात्रात्मक {2,255} समूह 1 ([a-z0-9]+(?:[._-][a-z0-9]+)*) के अंदर पूरे पैटर्न पर लागू होता है। इसका मतलब है कि इसे 2 से 255 बार दोहराया जा सकता है। इसका मतलब यह नहीं है कि पूरी स्ट्रिंग लंबाई 2 से 255 वर्णों तक सीमित है।

अब, अपने [a-z0-9]+(?:[._-][a-z0-9]+)*{2,255} regex असीमित वर्ण, भी मिलान कर सकते हैं, स्ट्रिंग [a-z0-9]+ के साथ मिलान किया 1 या अधिक वर्ण हो सकते हैं क्योंकि। (?:[._-][a-z0-9]+)* शून्य या अधिक वर्णों से मेल खा सकता है। सीमित मात्रात्मक {2,255} आपको जिस तरह से आवश्यकता है, यहां काम नहीं करता है।

^(?=.{2,255}$)[a-z0-9]+(?:[._-][a-z0-9]+)*$ 
^^^^^^^^^^^^^ 

(?=.{2,255}$) अग्रदर्शी की शुरुआत में केवल एक बार निष्पादित किया जाएगा:

2 से 255 पात्रों के लिए इनपुट स्ट्रिंग की लंबाई को प्रतिबंधित करने के लिए, आप एक अग्रदर्शी शुरू में लंगर डाले इस्तेमाल करना होगा स्ट्रिंग और एक मैच केवल तभी मिलेगा जब लुकहेड के अंदर की स्थिति पूरी हो जाती है: 2 से 255 वर्ण होने चाहिए (. एक नई लाइन के अलावा किसी भी वर्ण से मेल खाता है, लेकिन यह महत्वपूर्ण नहीं है क्योंकि आप बाद में मिलान पैटर्न में विशिष्ट वर्णों को अनुमति दें) स्ट्रिंग के अंत तक।

+0

की एक स्ट्रिंग निर्दिष्ट नहीं करता है, बहुत बहुत धन्यवाद, मैंने बहुत कुछ सीखा। मुझे लगता है कि मेरे पास रेगेक्स के बारे में जाने का लंबा रास्ता है, आपके उत्तर के लिए धन्यवाद! – xautjzd

+0

जिस तरह से लंबा होना जरूरी नहीं है। [* लुकहेड उदाहरण: सरल पासवर्ड सत्यापन *] पढ़ें (http://www.rexegg.com/regex-lookarounds.html#password) शॉर्टकट आलेख :) –

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