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 coincidencia de expresiones regulares funciona en el comprobador de expresiones regulares pero no en Oracle.

Tengo la expresión regular \bname[^a-zA-Z]+[0-9]+. Esta expresión regular funciona en https://regexr.com/ pero no funciona en Oracle. El patrón al que quiero llegar es:
<exact word "name" (mayúsculas o minúsculas)><cualquier caracter que no sea una letra (incluidos saltos de línea) o puede no haber caracteres><un número entero>

Aquí está mi muestra de prueba:

name8213

name:1232

name: 234

name 
1231

name: 
985

name:, 123

-- No debería coincidir con ninguno de los siguientes textos

nameis1233

name is 123

ornaments are cool 360

nickname 1323

name 1234 1233 (no debe coincidir con el segundo conjunto de números)

Sin embargo, cuando ejecuto:

SELECT REGEXP_SUBSTR('name 123', '\bname[^a-zA-Z]+[0-9]+', 1, 1, 'i') FROM DUAL

No obtengo nada. Mi objetivo final es extraer ese número entero completo.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el regex \bname[^a-zA-Z]+[0-9]+ que no funciona en Oracle podría ser debido a la sintaxis regex diferente utilizada en Oracle en comparación con otros lenguajes de programación.

    Para solucionar el problema y lograr el patrón deseado de extraer el número completo después de la palabra exacta “name”, se podría utilizar el siguiente regex en Oracle:

    SELECT REGEXP_SUBSTR('name 123', 'name[^a-zA-Z0-9]*([0-9]+)', 1, 1, 'i', 1) FROM DUAL
    

    Este regex utiliza un enfoque diferente donde coincide con la palabra exacta “name”, seguida de cualquier carácter no alfanumérico y luego captura los dígitos que siguen. Los dígitos capturados luego se extraen utilizando el sexto parámetro, que especifica la subexpresión a devolver.

    Este regex debería coincidir con las entradas de muestra proporcionadas y extraer el número completo con éxito.

Comments are closed.