es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La expresión regular de SQL no está funcionando como se espera.

Estoy teniendo problemas para encontrar una solución para esto.

set serveroutput on;
declare
EmailRegexp CONSTANT VARCHAR2(1000) :='^[a-z0-9!#$%&''*+/=?^_`{|}~-]+(\.[a-z0-9!#$%&''*+/=?^_`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+([A-Z]{2,})$';
p_vInEmailAddress VARCHAR2(30) := 'first@hotmail.net';

begin 
dbms_output.put_line('regex: '||LOWER(SUBSTR(REGEXP_SUBSTR(p_vInEmailAddress, '\.([^.\n\s]*)$'), 2))||''''); 
end;

--results:
--regex: '
--PL/SQL procedure successfully completed.

--now if i do this instead: 
p_vInEmailAddress VARCHAR2(30) := 'first@hotmail.com';
--I get results back

--PL/SQL procedure successfully completed.

--regex: com'

¿Qué estoy haciendo mal y por qué no le gusta la parte ‘.net’?

¿Cómo puedo solucionarlo?

Gracias

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que la expresión regular utilizada en el código está diseñada para solo coincidir con direcciones de correo electrónico que tengan dominios de nivel superior que consistan en dos o más letras mayúsculas (por ejemplo, “.COM”, “.NET”). Por lo tanto, cuando se utiliza la dirección de correo electrónico “first@hotmail.net”, la expresión regular no coincide y la salida está vacía.

    Para solucionar esto, puedes modificar la expresión regular para permitir cualquier dominio de nivel superior con una o más letras. Una posible solución podría ser cambiar la última parte de la expresión regular de “([A-Z]{2,})$” a “([A-Z]+)$”. Esto permitiría cualquier dominio de nivel superior que consista en una o más letras mayúsculas.

    Alternativamente, podrías cambiar el valor de p_vInEmailAddress a una dirección de correo electrónico con un dominio de nivel superior que coincida con la expresión regular actual (por ejemplo, “first@hotmail.COM”).

Comments are closed.