Critério de expressão regular

Olá, então, eu estava lendo um artigo, e me deparei com um código que valida um e-mail através de uma expressão regular. A expressão é a seguinte:

.+@.+\\.[a-z]+

eu gostaria de saber qual é o critério, qual é a lógica dessa expressão regular. O trecho [a-z], até onde sei, é algo dizendo que vai da letra ‘a’ até a letra ‘z’, o arroba parece ser o “separador”, que indica que deve ter um arroba no meio da string e tal. Bom, alguém poderia explicar melhor?

Obrigado.

Opa, e aí beleza ?

Então, não tenho muito conhecimento sobre regex, mas vou tentar explicar:

Temos o exemplo:

guillherme@email.com

Podemos separá-lo em várias partes:

  1. o nome do email (“guilherme”)
  2. o arroba ("@")
  3. nome do servidor do email (“email”)
  4. o ponto que separa o “servidor” do “com” (".")
  5. o fim da string… (“com”)

Primeiramente, você tem que conhecer as definições:

  • Quando você utiliza o caractere “.” (ponto), representa que ele aceita QUALQUER caractere. (ex: a,5,_,etc…)
  • O caractere “+” (mais) representa um quantificador: aceita 1…n vezes o caractere precedente.

Passo a Passo:

  • No ínicio, temos “.+”: ele que representa que vai aceitar QUAISQUER caracteres, que tenha pelo menos 1 caractere. (Parte 1: guilherme@email.com)

  • O uso do arroba(@) representa que o email deve possuir esse caractere. (Parte 2: guilherme@email.com)

  • Depois temos novamente o “.+”, que quer dizer que aceita qualquer caractere, em qualquer quantidade, mas com pelo menos 1 caractere. (Parte 3: guilherme@email.com)

  • Agora, é preciso especificar que deve existir um ponto (.) no email. Como o caractere ponto já é utilizado na sintaxe do regex, é preciso utilizar o \ imediatamente antes,
    para representar que você quer um PONTO ali, e não QUALQUER caractere. (Parte 4: guilherme@email.com)

  • A seguir temos: “[a-z]+”. A parte do “[a-z]” significa que aceita um caractere, que esteja entre A e Z, no alfabeto. Ao utilizar em conjunto com o quantificador “+”, representa
    que aceita entre 1…n caracteres que estejam entre A e Z. (Parte 5: guilherme@email.com )

Resumindo:

  • Deve ter um nome de email de 1…n caracteres;
  • Que contenha um @(arroba);
  • Deve ter um nome de servidor de 1…n caracteres;
  • Que contenha um .(ponto);
  • Deve ter o “resto” do nome do servidor, de 1…n caracteres (e os caracteres estão limitados entre A e Z).

Meio confuso a explicação ?!
Tentei explicar aí… talvez alguém explique de uma forma melhor.

Você também pode ler um pouco sobre expressões regulares nos links:
http://download.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html
http://download.oracle.com/javase/1.5.0/docs/api/java/util/regex/Matcher.html

flws…

Oi Guilherme. Puxa, perfeita explicação. Muito obrigado!

Vale lembrar que o . representa qualquer caractere(exceto quebra de linha), como foi explicado pelo Guilherme. Isso significa que endereços como " @gmail.com" são aceitos. Você poderia mudar a expressão para dizer o que você não quer aceitar. Para isso basta informar eles em uma lista e dizer que você não espera eles. Uma lista é representada por colchetes. Para negar a lista é utilizar o acento circunflexo. Por exemplo, se você quiser qualquer nome que não tenha espaços, quebras de linhas e similares, use:

[^\t\s\r\n]+

Isso é uma lista que pega qualquer cactere que não seja “coisa em branco”. Evitan e-mails como “joao da silva@gmail.com” (só lembrando que a pesquisa vai bater para silva@gmail.com, então é preciso ver se a expressão pegou todo o conteúdo digitado).

[quote=marcio_gs]Vale lembrar que o . representa qualquer caractere(exceto quebra de linha), como foi explicado pelo Guilherme. Isso significa que endereços como " @gmail.com" são aceitos. Você poderia mudar a expressão para dizer o que você não quer aceitar. Para isso basta informar eles em uma lista e dizer que você não espera eles. Uma lista é representada por colchetes. Para negar a lista é utilizar o acento circunflexo. Por exemplo, se você quiser qualquer nome que não tenha espaços, quebras de linhas e similares, use:

[^\t\s\r\n]+

Isso é uma lista que pega qualquer cactere que não seja “coisa em branco”. Evitan e-mails como “joao da silva@gmail.com” (só lembrando que a pesquisa vai bater para silva@gmail.com, então é preciso ver se a expressão pegou todo o conteúdo digitado).[/quote]

Obrigado pelo complemento! ^^