2012-12-17 16 views
5

पर "अधिकतम लंबाई" जोड़ना मैं एक विशेषता के साथ पहले से मौजूद रेगेक्स का विस्तार कैसे कर सकता हूं यह बताता है कि रेगेक्स अधिकतम लंबाई (मान लें) 255 से अधिक नहीं हो सकता है?रेगेक्स

मैं निम्नलिखित regex मिल गया है:

([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)

मैं इसे इस तरह की कोशिश की है, लेकिन असफल:

{.,255([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)}

+1

का मिलान नहीं हुआ परिणाम की लंबाई की जाँच करें? अभिव्यक्ति के बाद – Cameron

+0

'{।, 255} '। –

उत्तर

10

ऐसा करने का सबसे अच्छा तरीका, अगर इसे पूरी तरह से रेगेक्स आधारित समाधान होना है, तो लुकराउंड का उपयोग करना होगा।

देखें इस उदाहरण: http://regex101.com/r/yM3vL0

क्या मैं यहाँ कर रहा हूँ केवल तार कि लंबे समय से सबसे तीन पात्रों पर हैं मिलान किया जाता है। अनुमोदित, मेरे उदाहरण के लिए, यह करने का सबसे अच्छा तरीका नहीं है। लेकिन इसे अनदेखा करें, मैं बस एक उदाहरण दिखाने की कोशिश कर रहा हूं जो आपके लिए काम करेगा।

तुम भी अन्यथा इंजन सिर्फ lookaround (मैं गहराई में यह समझाने के लिए है?)

दूसरे शब्दों में ध्यान नहीं देगा, अपने पैटर्न एंकर करने के लिए है, तो आप सीमित करने के लिए अपने नियमित अभिव्यक्ति में निम्नलिखित का उपयोग कर सकते यह अधिक से अधिक 255 वर्ण:

^(?!^.{256})([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?) 

मैं भी लगता है कि यह मेरा कर्तव्य है आपको बताने के लिए आपका रेगुलर एक्सप्रेशन खराब है और आप बुरा महसूस करना चाहिए।

+0

+1, आप बिल्कुल सही हैं। मैंने पूरी तरह से regex हटा दिया है।लेकिन फिर भी आपकी पोस्ट ने मुझे रेगेक्स के बेहतर समझने में मदद की है :) इसके लिए धन्यवाद! – SeToY

+1

कोई समस्या नहीं! Http://www.regex101.com/quiz/ पर प्रश्नोत्तरी देखें यदि आप regexes को और भी बेहतर समझना चाहते हैं :) –

+0

@ लिंड्रियन लिंक के लिए धन्यवाद। –

0

एक regex वास्तव में सभी का समाधान करने के लिए नहीं किया जाता है समस्या का। इस मामले में, मैं सुझाव दूंगा कि 255 की लंबाई का परीक्षण महंगा होगा क्योंकि अंतर्निहित प्रतिनिधित्व में 255 राज्यों की आवश्यकता होगी। इसके बजाय, स्ट्रिंग की लंबाई को अलग से जांचें।

लेकिन क्या तुम सच में करना होगा, आप अपने पात्रों वैकल्पिक बनाने के लिए इतना कुछ तरह की आवश्यकता होगी, तो:

.?{255} 

255 वर्ण या उससे कम के किसी भी स्ट्रिंग से मेल खाएगी।

+0

लेकिन किसी को भी आपके ईमेलड्रेस के सामने 255 यादृच्छिक वर्ण रखने की अनुमति होगी !!! – jessehouwing

1

क्यों स्ट्रिंग की अधिकतम लंबाई की जांच क्यों न करें? यदि आप DataAnnotations का उपयोग कर रहे हैं, तो आप संपत्ति पर [स्ट्रिंग लम्बाई (255)] चिपक सकते हैं।

यदि आप एएसपी.नेट वैलिडेटर्स का उपयोग कर रहे हैं, तो आप एक रेंज वैलिडेटेटर का उपयोग कर सकते हैं।

यदि आप कस्टम सत्यापन फ़ंक्शन का उपयोग कर रहे हैं तो यह इसके खिलाफ एक जटिल रेगेक्स फेंकने से पहले लंबाई की जांच करने के लिए और अधिक पठनीय (और तेज़) है।

0

आप एक नज़र आगे का उपयोग कर सकेंगे "हो सकता है" इस प्रकार है:

^(?=.{0,255}$)your regex here$ 

तो ...

^(?=^.{0,255}$)([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$