2011-11-23 10 views
6

मेरे पास यह नियमित अभिव्यक्ति है और वह नियम जोड़ना चाहता है जो कुल लंबाई को सीमित करता है 15 वर्ण से अधिक नहीं है। मैंने कुछ दिखने वाले उदाहरण देखे लेकिन वे बिल्कुल स्पष्ट नहीं हैं। क्या आप नए नियम का समर्थन करने के लिए इस अभिव्यक्ति को संशोधित करने में मेरी सहायता कर सकते हैं।इनपुट स्ट्रिंग की कुल लंबाई को सीमित करने के लिए रेगेक्स लुकहेड का उपयोग कैसे करें

^([A-Z]+()*[A-Z]+)+$ 

उत्तर

9

जब से तुम शीर्षक में यह उल्लेख किया है, आपके मामले के लिए एक नकारात्मक अग्रदर्शी होगा:

^(?!.{16,})(regex goes here)+$ 

नोट शुरुआत (?!.{16,}) पर नकारात्मक अग्रदर्शी, जांच होती है कि वह स्ट्रिंग 16 नहीं है या अधिक पात्र

हालांकि, @TimPietzcker ने बताया है कि आपके रेगेक्स को बहुत सरल बनाया जा सकता है, और ऐसे रूप में फिर से लिखा जा सकता है जो बैकट्रैकिंग के लिए प्रवण नहीं है, इसलिए आपको उसका समाधान उपयोग करना चाहिए।

+1

यह अभी भी विनाशकारी बैकट्रैकिंग के लिए बेहद प्रवण है। एक अच्छा regex नहीं है। –

+0

@TimPietzcker बहुत अच्छा बिंदु। उत्तर अब अपडेट किया गया, धन्यवाद –

5
^(?=.{15}$)([A-Z]+()*[A-Z]+)+$ 

See it

+0

यह आसानी से न्यूनतम स्ट्रिंग लम्बाई प्रतिबंध –

11

वास्तव में, यह सब एक बहुत सरल किया जा सकता:

^[A-Z][A-Z ]{0,13}[A-Z]$ 

करता है आप क्या चाहते हैं। या कम से कम आपका वर्तमान रेगेक्स क्या करता है (साथ ही लम्बाई प्रतिबंध)। यह विशेष रूप से catastrophic backtrackin जी के साथ समस्याओं से बचाता है, जिसे आप स्वयं को सेट करते समय उस समय घोंसला करते हैं। बिंदु में

मामला:

अपने मूल regex के खिलाफ स्ट्रिंग ABCDEFGHIJKLMNOP की कोशिश करो। रेगेक्स इंजन तुरंत मेल खाता है। अब स्ट्रिंग ABCDEFGHIJKLMNOPa आज़माएं। यह रेगेक्स इंजन को लगभग 230,000 चरणों को समझने के लिए ले जाएगा कि यह स्ट्रिंग से मेल नहीं खा सकता है। और प्रत्येक अतिरिक्त चरित्र एक असफल मैच निर्धारित करने के लिए आवश्यक चरणों की संख्या को दोगुना करता है।

+0

जोड़ने में सक्षम बनाता है, ऐसा लगता है कि इसे कम से कम 2 अक्षर, शुरुआत में एक, अंत में एक की आवश्यकता होती है। – sln

+0

आपके द्वारा दिया गया रेगेक्सपी "ए" और "ए" से मेल खाता है, जिनमें से कोई भी पोस्टर के regexp से मेल नहीं खाता है। –

+0

नहीं, यह एक सफेद जगह के साथ समाप्त स्ट्रिंग की अनुमति देगा। – AustinTX

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

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