2010-10-07 15 views
5

यदि कोई ऐसा है जो इसे संभाल सकता है, तो ईमेल फ़ॉर्म "टू" लाइन से आने वाली स्ट्रिंग से ईमेल पते निकालने के लिए सही रेगेक्स पैटर्न क्या होगा, जो पते को अनुमति देता है अल्पविराम ",", अर्धविराम ";", रिक्त स्थान, या तीनों के किसी भी संयोजन द्वारा सीमित हो। रेगेक्स को "शोर" टेक्स्ट को अनदेखा करने में भी सक्षम होना चाहिए, जैसे कि अगर पता "<" और ">" वर्णों में संलग्न है, या उसके पास ईमेल पते के बगल में एक वास्तविक नाम है। उदाहरण के लिए, इस स्ट्रिंग से कि में था फ़ील्ड:रीजिक्स ईमेल फॉर्म "टू" फ़ील्ड को पार्स करने के लिए

"Joe Smith" <[email protected]>, [email protected]; [email protected] [email protected] 

पैटर्न के निम्नलिखित मैचों वापस जाने के लिए सक्षम होना चाहिए: jsmith @ उदाहरण, [email protected], [email protected], mjane @ gmail.com

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

धन्यवाद

+3

ईमेल-पार्सिंग लाइब्रेरी का उपयोग करें। इसे स्वयं करने की कोई आवश्यकता नहीं है। (आप ईमेल हेडर को पार्स करने के लिए पहले PHP प्रोग्रामर नहीं हैं।) – Ether

उत्तर

6

प्रयास करें

\b[A-Z0-9._%+-][email protected](?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b 

(RegexBuddy के सौजन्य से) में

preg_match_all('/\b[A-Z0-9._%+-][email protected](?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b/i', $subject, $result, PREG_PATTERN_ORDER); 
$result = $result[0]; 

नोट यह केस-संवेदी बनाने के लिए /i आपरिवर्तक के रूप में।

स्ट्रिंग में ई-मेल पते खोजने के लिए regexes की कमी के स्पष्टीकरण के लिए this question भी देखें।

+3

मेरे ईमेल पते में '+' की अनुमति देने के लिए धन्यवाद ... हाल ही में मैंने कुछ साइनअप फॉर्मों में भाग लिया है जो इसकी अनुमति नहीं देते हैं .. मुझे सचमुच परेशान करता है। – mpen

1

मुझे http://www.webcheatsheet.com/php/regular_expressions.php से रेगेक्स मिला, और केवल इसे थोड़ा संशोधित किया।

$string = '"Joe Smith" <[email protected]>, [email protected]; [email protected] [email protected]'; 
$email_regex = "/[^0-9< ][A-z0-9_]+([.][A-z0-9_]+)*@[A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}/"; 
preg_match_all($email_regex, $string, $matches); 
$emails = $matches[0]; 

अब $ ईमेल आपके सभी ईमेल पते के साथ एक सरणी होगी।

1

जबकि अपने प्रश्न RegEx के लिए विशिष्ट था और टिम, तुम एक महान जवाब दिया एक सरल उपाय की तलाश में लोगों के लिए, पृष्ठ पर mailparse_rfc822_parse_addresses पर देखने http://php.net/manual/en/function.mailparse-rfc822-parse-addresses.php

नोट यह एक मानक PHP फंक्शन नहीं है और एक्सटेंशन को इंस्टॉल की आवश्यकता है । अर्थव्यवस्था होस्टिंग समाधान आपको पीईसीएल एक्सटेंशन स्थापित करने की अनुमति नहीं दे सकता है।

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