2010-02-12 13 views
7

Me gustaría una expresión regular que extraiga las direcciones de correo electrónico de una Cadena (usando expresiones regulares de Java).extracción de correo electrónico java expresión regular?

Eso realmente funciona.

+2

direcciones de correo electrónico y expresiones regulares: http://stackoverflow.com/questions/201323/what- is-the-best-regular-expression-for-validating-email-addresses –

+1

Sí. Pero, de hecho, validar no es siempre lo que necesitamos. Si coloca los símbolos S y ^, no funcionará con un texto arbitrario. Espero que mi pregunta y respuesta también sean útiles para otros. – EugeneP

+0

Los (muchos) patrones/respuestas publicados en ese hilo deberían proporcionarle información más que suficiente sobre IMO. –

Respuesta

15

Aquí está la expresión regular que realmente funciona. Pasé una hora navegando por la web y probando diferentes enfoques, y la mayoría de ellos no funcionó, aunque Google ocupó el primer lugar en esas páginas.

quiero compartir con ustedes una expresión regular de trabajo:

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

Aquí está el enlace original: http://www.mkyong.com/regular-expressions/how-to-validate-email-address-with-regular-expression/

+4

Lo siento, esto no está bien. Fallará para el direccionamiento plus (http://en.wikipedia.org/wiki/E-mail_address#Sub-addressing), entre otras cosas (un ejemplo es [email protected]). Escribir una expresión regular correcta para direcciones de correo electrónico es/muy/difícil (si no imposible). Ver también http://stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses/201378#201378 –

+0

Y no hablar de la decisión de la ICANN de permitir caracteres no latinos en direcciones de correo electrónico: http://stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses/1931322#1931322 – BalusC

+1

Bueno, tienes razón, no lo hice t saber que un signo más podría ser parte de cualquier dirección de correo electrónico. Puedo agregarlo fácilmente entre corchetes. Pero estoy bastante seguro de que el 99.9% de las personas no lo usa, y la mayoría de los servidores de correo electrónico no permiten un signo más como parte de la dirección de correo electrónico. Absolutamente de acuerdo en que puede haber situaciones en las que no importa qué expresión regular fallará en la validación/extracción de correo electrónico. Aunque este funcionó para mí y he visto otros que no. – EugeneP

3

instalar este comprobador de expresiones regulares Plugin en eclipse, y usted tendría ballena de una vez prueba regex
http://brosinski.com/regex/.

Puntos a tener en cuenta:
En el complemento, utilice una sola barra diagonal inversa para el escape de caracteres. Pero cuando transcriba la expresión regular en una cadena Java/C#, tendrá que duplicarlas, ya que estaría realizando dos escapes, primero escapando de la barra invertida desde el mecanismo de cadena Java/C#, y luego el segundo para el mecanismo real de escape de caracteres regex.

Rodee las secciones de la expresión regular cuyo texto desea capturar con corchetes/elipsis redondas. Luego, puede usar las funciones de grupo en Java o C# regex para conocer los valores de esas secciones.

([_A-Za-z0-9 -] +) (\. [_ A-Za-z0-9 -] +) @ ([A-Za-z0-9] +) (\. [ A-Za-z0-9] +)

Por ejemplo, usando la expresión regular anterior, la siguiente cadena

[email protected] 

rendimientos

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

Grupo 0 es siempre la captura de cadena entera emparejado

Si no encierra ninguna sección con puntos suspensivos, solo podrá detectar una coincidencia pero no podrá capturar el texto.

Puede ser menos confuso crear algunas expresiones regulares que una expresión regular larga, ya que puede probarlas una por una y luego decidir qué expresiones regulares se deben consolidar. Especialmente cuando encuentras un nuevo patrón de correo electrónico que nunca antes habías considerado.

+0

@ h2g2java Hablando de mí, ya uso un complemento similar. Y aprecio mucho su respuesta, porque también sin esas herramientas, trabajar con expresiones regulares puede ser una pesadilla. Estoy seguro de que su respuesta ayudará a muchas personas a ahorrar su tiempo. – EugeneP

4

Tuve que agregar algunos guiones para permitirlos. Entonces un resultado final en Javanese:

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

un poco tarde pero está bien.

Esto es lo que uso. Simplemente péguelo en la consola de FireBug y ejecútelo. Busque en la página web un 'Textarea' (muy probablemente en la parte inferior de la página) que contendrá una lista separada de todas las direcciones de correo electrónico encontradas en las etiquetas A.

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

construir-en el email patrón de Java 's (Patterns.EMAIL_ADDRESS) funciona a la perfección:

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; 
    } 
Cuestiones relacionadas