2010-02-12 10 views
7

मुझे एक नियमित अभिव्यक्ति चाहिए जो स्ट्रिंग से ईमेल पते निकाल देगा (जावा नियमित अभिव्यक्तियों का उपयोग करके)।जावा ईमेल निष्कर्षण नियमित अभिव्यक्ति?

वह वास्तव में काम करता है।

+2

ई मेल पते और regex: http://stackoverflow.com/questions/201323/what- सबसे अच्छा-नियमित-अभिव्यक्ति-सत्यापन-ईमेल-पते –

+1

हां है। लेकिन वास्तव में मान्य करना हमेशा हमें नहीं चाहिए। यदि आप एस और^प्रतीकों को रखेंगे तो यह मनमाने ढंग से पाठ के साथ काम नहीं करेगा। मुझे आशा है कि मेरा प्रश्न और उत्तर दूसरों के लिए भी उपयोगी होगा। – EugeneP

+0

उस धागे में पोस्ट किए गए (कई!) पैटर्न/उत्तर आपको पर्याप्त जानकारी आईएमओ प्रदान कर सकते हैं। –

उत्तर

15

यहां नियमित अभिव्यक्ति है जो वास्तव में काम करती है। मैंने वेब पर एक घंटे सर्फिंग और विभिन्न दृष्टिकोणों का परीक्षण किया है, और उनमें से अधिकतर काम नहीं करते हैं, हालांकि Google ने उन पृष्ठों को शीर्ष स्थान दिया है।

 
[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,}) 

यहाँ मूल लिंक है::

मैं तुम्हारे साथ एक काम नियमित अभिव्यक्ति साझा करना चाहते हैं http://www.mkyong.com/regular-expressions/how-to-validate-email-address-with-regular-expression/

+4

क्षमा करें, यह सही नहीं है। यह प्लस-एड्रेसिंग (http://en.wikipedia.org/wiki/E-mail_address#Sub-addressing) के लिए असफल हो जाएगा, अन्य चीजों के साथ (उदाहरण एक उदाहरण है [email protected])। ईमेल पते के लिए एक सही नियमित अभिव्यक्ति लिखना/बहुत कठिन है (यदि असंभव नहीं है)। यह भी देखें http://stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses/201378#201378 –

+0

और गैर-लैटिन वर्णों को अनुमति देने के आईसीएएनएन के निर्णय के बारे में बात नहीं करते ईमेल पते में: http://stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses/1931322#1931322 – BalusC

+1

ठीक है, आप सही हैं, मैंने नहीं किया ' टी नहीं जानता कि एक प्लस साइन किसी भी ईमेल पते का हिस्सा हो सकता है। मुझे स्क्वायर ब्रैकेट के बीच आसानी से जोड़ा जा सकता है। लेकिन मुझे पूरा यकीन है कि 99.9% लोग इसका उपयोग नहीं करते हैं, और अधिकांश ईमेल सर्वर ईमेल पते के हिस्से के रूप में प्लस साइन की अनुमति नहीं देते हैं। बिल्कुल इस बात से सहमत हैं कि ऐसी स्थितियां हो सकती हैं जहां ईमेल सत्यापन/निष्कर्षण पर नियमित अभिव्यक्ति विफल न हो। हालांकि यह मेरे लिए काम करता है और मैंने दूसरों को देखा है जो नहीं। – EugeneP

3

ग्रहण में प्लगइन इस regex परीक्षक स्थापित करें, और आप एक समय की व्हेल होगा परीक्षण regex
http://brosinski.com/regex/

नोट करने के लिए अंक:
प्लगइन में, चरित्र से बचने के लिए केवल एक बैकस्लैश का उपयोग करें। लेकिन जब आप जावा/सी # स्ट्रिंग में रेगेक्स को ट्रांसक्रिप्ट करते हैं तो आपको उन्हें दोहराएंगे क्योंकि आप दो एस्केप कर रहे होंगे, पहले जावा/सी # स्ट्रिंग मैकेनिज्म से बैकस्लैश से बच निकलें, और फिर वास्तविक रेगेक्स कैरेक्टर एस्केप मैकेनिज्म के लिए दूसरा।

रेगेक्स के उन हिस्सों के आस-पास जहां आप पाठ को ब्रैकेट/इलिप्स के साथ कैप्चर करना चाहते हैं। फिर, आप उन वर्गों के मानों को जानने के लिए जावा या सी # रेगेक्स में समूह कार्यों का उपयोग कर सकते हैं।

([_A-Za-z0-9 -] +) (\। [_ ए-ज़ा-जे 0-9 -] +) @ ([ए-ज़ा-जे 0-9] +) (\। [ ए-zA-Z0-9] +)

उदाहरण के लिए, ऊपर regex, निम्न स्ट्रिंग

[email protected] 

पैदावार

start=0, end=16 
Group(0) = [email protected] 
Group(1) = abc 
Group(2) = .efg 
Group(3) = asdf 
Group(4) = .cde 

समूह 0 हमेशा पूरी स्ट्रिंग पर कब्जा है का उपयोग करते हुए मिलान नहीं हुआ।

यदि आप इलिप्स के साथ कोई भी अनुभाग संलग्न नहीं करते हैं, तो आप केवल एक मैच का पता लगाने में सक्षम होंगे लेकिन पाठ को कैप्चर करने में सक्षम नहीं होंगे।

यह एक लंबे समय तक पकड़ने के लिए कुछ रेगेक्स बनाने में कम भ्रमित हो सकता है - क्योंकि आप प्रोग्रामेटिक रूप से एक-एक करके परीक्षण कर सकते हैं और फिर तय कर सकते हैं कि कौन से रेगेक्स को समेकित किया जाना चाहिए। विशेष रूप से जब आपको एक नया ईमेल पैटर्न मिलता है जिसे आपने पहले कभी नहीं माना था।

+0

@ h2g2java अपने बारे में बात करते हुए, मैं पहले से ही एक समान प्लगइन का उपयोग करता हूं। और मैं आपके उत्तर की बहुत सराहना करता हूं, cuz मुझे यह भी पता चलता है कि नियमित अभिव्यक्तियों के साथ काम करने वाले ऐसे उपकरण बिना दुःस्वप्न हो सकते हैं। मुझे यकीन है कि आपका उत्तर कई लोगों को अपना समय बचाने में मदद करेगा। – EugeneP

4

मुझे उन्हें अनुमति देने के लिए कुछ डैश जोड़ना पड़ा। तो जावानीज़ में अंतिम परिणाम:

final String MAIL_REGEX = "([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})"; 
0

थोड़ा देर हो चुकी है लेकिन ठीक है।

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

var jquery = document.createElement('script'); 
    jquery.setAttribute('src', 'http://code.jquery.com/jquery-1.10.1.min.js'); 
    document.body.appendChild(jquery); 

    var list = document.createElement('textarea'); 
    list.setAttribute('emaillist'); 
    document.body.appendChild(list); 
var lijst = ""; 

    $("#emaillist").val(""); 
    $("a").each(function(idx,el){ 
     var mail = $(el).filter('[href*="@"]').attr("href"); 
     if(mail){ 
      lijst += mail.replace("mailto:", "")+","; 
     } 
    }); 
    $("#emaillist").val(lijst); 
0

जावा के निर्माण में ईमेल पते पैटर्न (Patterns.EMAIL_ADDRESS) पूरी तरह से काम करता है:

public static List<String> getEmails(@NonNull String input) { 
     List<String> emails = new ArrayList<>(); 
     Matcher matcher = Patterns.EMAIL_ADDRESS.matcher(input); 
     while (matcher.find()) { 
      int matchStart = matcher.start(0); 
      int matchEnd = matcher.end(0); 
      emails.add(input.substring(matchStart, matchEnd)); 
     } 
     return emails; 
    } 

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

  • कोई संबंधित समस्या नहीं^_^