सामान्य ज्ञान का उपयोग करने के लिए नीचे क्या आता है। यदि आप जो मिलान करने की कोशिश कर रहे हैं वह एक अप्रबंधनीय, राक्षस नियमित अभिव्यक्ति बन जाता है तो आपको या तो इसे छोटे, तार्किक उप-नियमित अभिव्यक्तियों में तोड़ने की आवश्यकता होती है या आपको अपने समाधान को फिर से सोचने की आवश्यकता होती है।
ईमेल पते लें (आपके उदाहरण के अनुसार)। यह सरल नियमित अभिव्यक्ति (रेगुलर एक्सप्रेशन से साथी से लिया गया) वहाँ बाहर सभी ईमेल के 99% से मेल खाता है:
\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b
यह संक्षिप्त और सटीक है और आप शायद ही कभी इसके साथ मुद्दों में चलेंगे। हालांकि, जैसा कि RegEx दोस्त के लेखक बताते हैं, यदि आपका ईमेल पता दुर्लभ शीर्ष-स्तरीय डोमेन "संग्रहालय" में है, तो इसे स्वीकार नहीं किया जाएगा।
RFC 2822 नामक मानक के पालन के लिए आपको आवश्यक सभी ईमेल पतों से मिलान करने की आवश्यकता है। यह ईमेल पते को स्वरूपित किए जा सकने वाले तरीकों की रूपरेखा बताता है और यह बेहद जटिल है।
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"
(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x
0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]
(?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.)
{3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08
\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
यह स्पष्ट रूप से रिटर्न ह्रासमान के एक समस्या बन जाता है:
यहां नमूने नियमित अभिव्यक्ति RFC 2822 का पालन करने का प्रयास कर रहा है। आसानी से बनाए रखा कार्यान्वयन का उपयोग करना बेहतर है जो 99% ईमेल पते से मेल खाता है जो राक्षसों का बना है जो उनमें से 99.9% स्वीकार करता है।
नियमित अभिव्यक्ति आपके प्रोग्रामर टूलबॉक्स में होने के लिए एक शानदार उपकरण है लेकिन वे आपकी सभी पार्सिंग समस्याओं का समाधान नहीं हैं। यदि आपको लगता है कि आपका रेगेएक्स समाधान बेहद जटिल हो गया है तो आपको अपने पाठ के भाग से मेल खाने के लिए इसे नियमित रूप से छोटे नियमित अभिव्यक्तियों में विभाजित करने की आवश्यकता है या आपको अपनी समस्या को हल करने के लिए अन्य विधियों को देखना शुरू करना होगा। इसी तरह, ऐसी समस्याएं हैं जो नियमित अभिव्यक्तियां, उनकी प्रकृति के कारण हल नहीं कर सकती हैं (जैसा कि एक पोस्टर ने कहा है, Regular Language का पालन नहीं कर रहा है)।
ठीक है, पर्ल एक्सटेंशन हैं। वे नियमित भाषाओं की कक्षा से बाहर निकलते हैं। – ADEpt
मैं एक और व्यावहारिक दृष्टिकोण देखना चाहता हूं, लेकिन अब तक यह सही जवाब है। – Null303
लिंक के बाद ... "इसे औपचारिक नियमित अभिव्यक्ति द्वारा वर्णित किया जा सकता है।" आपकी परिभाषा परिपत्र है। : पी – BoltBait