Je voudrais une expression régulière qui extrait des adresses électroniques d'une chaîne (à l'aide d'expressions régulières Java). P>
ça marche vraiment. P>
5 Réponses :
Voici l'expression régulière qui fonctionne vraiment. J'ai passé une heure à surfer sur le Web et à tester différentes approches, et la plupart d'entre eux n'ont pas fonctionné bien que Google a classé ces pages.
Je veux partager avec vous une expression régulière de travail: p> Voici le lien d'origine:
http: //www.mkyong. com / régulières-expressions / comment validez-la-adresse-email-avec-régulier-expression / p> p>
Désolé, ce n'est pas raison. Il échouera pour plus d'adressage ( en.wikipedia.org/wiki/e- Mail_Address # Sous-adresses ), entre autres choses (un exemple est FOO+@gmail.com). Écrire une expression régulière correcte pour les adresses électroniques est / très / difficile (sinon impossible). Voir aussi Stackoverflow.com/Questtions/201323/...
Et ne pas parler de la décision de l'ICANN d'autoriser des caractères non latins dans les adresses électroniques: Stackoverflow.com/questions/201323/...
Eh bien, vous avez raison, je ne savais pas qu'un signe plus pourrait faire partie d'une adresse e-mail. Je peux être facilement ajouté entre crochets. Mais je suis à peu près sûr que 99,9% des personnes ne l'utilisent pas, et la plupart des serveurs de messagerie n'autorisent pas un signe plus dans le cadre de l'adresse électronique. Absolument d'accord pour dire qu'il peut y avoir des situations où quelle que soit l'expression régulière échouera sur la validation / l'extraction par courrier électronique. Bien que celui-ci ait travaillé pour moi et que j'ai vu d'autres qui ne l'ont pas fait.
Eh bien, Google Permet + signe, donc tous les utilisateurs intelligents ayant une gmail peuvent le faire. ; P
Installer ce plugin testeur de regex dans Eclipse, et vous auriez une baleine d'un test de temps à la réégalité de l'heure http://brosinski.com/regex/ .
points à noter:
Dans le plugin, utilisez une seule barre oblique inverse pour l'évacuation du personnage. Mais lorsque vous transcrivez la regex dans une chaîne Java / C #, vous devez les doubler, car vous effectueriez deux futures évasions, d'abord échapper à la barre oblique inverse du mécanisme de chaîne Java / C #, puis de seconde pour le mécanisme d'échappement du caractère de regex réel. p>
entourez les sections de la regex dont vous souhaitez capturer le texte avec des crochets ronds / des ellipses. Ensuite, vous pouvez utiliser les fonctions de groupe dans Java ou C # Regex pour connaître les valeurs de ces sections. P>
([_ A-ZA-Z0-9 -] +) (\. [_ A-ZA- z0-9 -] +) @ ([A-ZA-Z0-9] +) (\. [A-ZA-Z0-9] +) EM> P> Par exemple , en utilisant la regex ci-dessus, la chaîne suivante P> rendements p> groupe 0 est toujours la capture de la chaîne totale correspondante . p> Si vous ne mettez aucune section avec des ellipses, vous ne seriez capable de détecter une correspondance que pour ne pas pouvoir capturer le texte. P> Il pourrait être moins déroutant de créer Quelques regexs d'une longueur d'une longue catch - toutes regex, puisque vous pouvez tester programmatiquement une par une, puis décider que les regex devraient être consolidés. Surtout lorsque vous trouvez un nouveau modèle de courrier électronique que vous n'aviez jamais envisagé auparavant. P> p>
@ h2g2java parle de moi-même, j'utilise déjà un plugin similaire. Et j'apprécie beaucoup votre réponse, parce que je trouve aussi que sans que de tels outils travaillant avec des expressions régulières puissent être un cauchemar. Je suis sûr que votre réponse aidera beaucoup de gens à économiser leur temps.
J'ai dû ajouter des tirets pour leur permettre. Donc, un résultat final en Javanais:
Un peu tard mais d'accord.
Voici ce que j'utilise. Il suffit de la coller dans la console de Firebug et de la gérer. Regardez sur la page Web pour un 'Texarea' (très probablement au bas de la page) contiendra une liste séparée de toutes les adresses électroniques trouvées dans une balises. P>
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);
Le modèle d'adresse email de java ( MotifS.Email_Address Code>
) fonctionne parfaitement:
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; }
Adresses e-mail et regex: Stackoverflow.com/Questtions/201323/...
Ouais. Mais en validant n'est pas toujours ce dont nous avons besoin. Si vous mettez les symboles S et ^, cela ne fonctionnera pas avec un texte arbitraire. J'espère que mes questions et mes réponses seront utiles aux autres.
Les modèles (de nombreux!) / Réponses publiés dans ce fil doivent vous fournir plus que suffisamment d'informations IMO.