Jump to content
Fivewin Brasil

Pegar conteúdo antes do @hotmail.com


kapiaba

Recommended Posts

A solução acima já resolve seu problema, mas segue aqui uma que tem na própria documentação do xHarbour que pode ajudar em casos mais complexos, como se fosse o caso de voce precisar localizar um email dentro de um texto ou separar todas as partes. Divirta-se com EXPRESSÃO REGULAR:

(veja que ele da a solucao para o seu problema separando todas as partes do email em um array, nesta linha abaixo)

aResult := HB_RegExSplit( "[.@]", cEMail )
? "----- email components --"
AEval( aResult, {|c| QOut© } )

===============================================

EXEMPLO COMPLETO:

// The example demonstrates the result of parsing a text string
// using different regular expressions.

PROCEDURE Main
LOCAL cRegEx := "[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}"
LOCAL cText := "Send your request to info@xharbour.com " + ;
"for more information"
LOCAL aResult, cEmail

CLS

? "----- words in text -----"
aResult := HB_RegExSplit( " ", cText )
AEval( aResult, {|c| QOut© } )

cEmail := HB_AtX( cRegEx, cText, .F. )
?
? "----- email address -----"
? cEMail

aResult := HB_RegExSplit( "[.@]", cEMail )

?
? "----- email components --"
AEval( aResult, {|c| QOut© } )

** Output
// ----- words in text -----
// Send
// your
// request
// to
// info@xharbour.com
// for
// more
// information
//
// ----- email address -----
// info@xharbour.com
//
// ----- email components --
// info
// xharbour
// com
RETURN

Link to comment
Share on other sites

Apenas para explicar como funciona e ilustrar o que foi falado: (se eu falar alguma besteira me corrijam)




LOCAL cRegEx := "([0-9]{4})[-/]([0-9]{1,2})[-/]([0-9]{1,2})"
LOCAL aDates := { "2006-9-28", ;
"2006/10/1", ;
"2006-123-1" }



O que significa essa expressão regular (variável cRegEx) ?


Vamos desmembrar a danada pra facilitar a leitura:



([0-9]{4}) = Condição 01 - Procure caracteres de 0 a 9, pegando 4 caracteres
[-/] = Condição 02 - Procure o caracter - ou /
([0-9]{1,2}) = Condição 03 - Procure caracteres de 0 a 9, pegando 1 ou 2 caracteres
[-/] = Condição 04 - Procure o caracter - ou /
([0-9]{1,2}) = Condição 05 - Procure caracteres de 0 a 9, pegando 1 ou 2 caracteres


Vale lembrar que a expressão regular faz um AND, ou seja, se na string informada, alguma CONDIÇÃO não for satisfeita, não irá retornar, é o caso do terceiro elemento do vetor aDates.


Testem no MySQL para entender melhor (mysql retorna 1 se a expressão for satisfeita, e 0 caso contrário):



SELECT "2006-9-28" REGEXP "([0-9]{4})[-/]([0-9]{1,2})[-/]([0-9]{1,2})";
SELECT "2006/10/1" REGEXP "([0-9]{4})[-/]([0-9]{1,2})[-/]([0-9]{1,2})";
SELECT "2006-123-1" REGEXP "([0-9]{4})[-/]([0-9]{1,2})[-/]([0-9]{1,2})";

Link to comment
Share on other sites

Muito bom, não sabia que dava pra usar direto no banco de dados. Vi que em SQL SERVER também da certo.

Vou implementrar nos sistemas aqui para desconsiderar acentuação nas pesquisas com SELECT direto.

Vlwww

Apenas para explicar como funciona e ilustrar o que foi falado: (se eu falar alguma besteira me corrijam)
LOCAL cRegEx := "([0-9]{4})[-/]([0-9]{1,2})[-/]([0-9]{1,2})"
LOCAL aDates := { "2006-9-28", ;
                  "2006/10/1", ;
                  "2006-123-1" }
O que significa essa expressão regular (variável cRegEx) ?
Vamos desmembrar a danada pra facilitar a leitura:
   ([0-9]{4})   = Condição 01 - Procure caracteres de 0 a 9, pegando 4 caracteres
   [-/]         = Condição 02 - Procure o caracter - ou /
   ([0-9]{1,2}) = Condição 03 - Procure caracteres de 0 a 9, pegando 1 ou 2 caracteres
   [-/]         = Condição 04 - Procure o caracter - ou /
   ([0-9]{1,2}) = Condição 05 - Procure caracteres de 0 a 9, pegando 1 ou 2 caracteres
Vale lembrar que a expressão regular faz um AND, ou seja, se na string informada, alguma CONDIÇÃO não for satisfeita, não irá retornar, é o caso do terceiro elemento do vetor aDates.
Testem no MySQL para entender melhor (mysql retorna 1 se a expressão for satisfeita, e 0 caso contrário):
SELECT "2006-9-28"  REGEXP "([0-9]{4})[-/]([0-9]{1,2})[-/]([0-9]{1,2})";
SELECT "2006/10/1"  REGEXP "([0-9]{4})[-/]([0-9]{1,2})[-/]([0-9]{1,2})";
SELECT "2006-123-1" REGEXP "([0-9]{4})[-/]([0-9]{1,2})[-/]([0-9]{1,2})";
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...