Tengo la siguiente situación. Tengo que subcadenar la expresión regular de la descripción usando MySQL. Descripción:
Lorem D9801 ipsum dolor sit amet
Donde D9801 es REGEXP. Cada descripción de texto fuerte tiene contenido diferente, pero mi expresión regular debería verse así: REGEXP 'D [[: digit:]] {4}'
REGEXP siempre tiene "D" al principio y "xxxx" - 4 dígitos al final: Dxxxx
Sé que REGEXP devuelve solo el valor verdadero / falso, pero ¿cómo puedo hacer que la consulta devuelva solo el valor 'D9801'?
Intenté algo como esto:
SELECT SUBSTRING (description, LOCATE(REGEXP 'D[[:digit:]]{4}', description), 5)
FROM (
SELECT "Lorem D9801 ipsum dolor sit amet" AS description
) temp
Sé que está mal, así que trato con esto:
SELECT
id,
SUM(description REGEXP 'D[[:digit:]]{4}') AS matches,
CASE
WHEN (SUM(description REGEXP 'D[[:digit:]]{4}') > 0) THEN
SUBSTRING(description, LOCATE( /*POSITION_OF_REGEXP_IN_DESC*/ , description), 5)
ELSE 'Brak schematu'
END AS show_substr FROM ps_description GROUP BY id;
Pero, ¿cómo encontrar la posición de regexp?
Escuché sobre UDF pero no puedo usarlo, uso el alojamiento OVH.
mysql
regular-expression
Marek Andrzejak
fuente
fuente
Respuestas:
Esto necesitaría usar la sintaxis
LOCATE
ySUBSTRING
para sacar la información de la cadena. Aquí se explica la sintaxis básica de localización que necesitaría .LOCATE (buscar str, str, [posición])
Si bien la función de subcadena que necesita se explica aquí
SUBSTRING (str, pos, len)
La forma más fácil de ver esto es pensar en la subcadena como la siguiente SUBSTRING (str FROM pos FOR len)
La sintaxis que usé para obtener la segunda palabra está debajo, aproveché los espacios que están constantemente alrededor de la segunda palabra que estás tratando de extraer.
fuente
Desafortunadamente, la función de expresión regular de MySQL devuelve verdadero, falso o nulo dependiendo de si la expresión existe o no.
El truco para lograr el comportamiento deseado es determinar qué subcadena comienza con el carácter que le interesa, tiene la longitud correcta y le sigue un número. Se utiliza una serie de funciones substring_index para extraer la cadena ...
fuente