pattern - regexp_like oracle example digit
Oracle REGEXP_LIKE y lĂmites de palabras (2)
Creo que quieres probar
select 1 from dual
where regexp_like (''does test work here'', ''(^|/s)test(/s|$)'');
porque el /b
no aparece en esta lista: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_regexp.htm#i1007670
El /s
se asegura de que la prueba se inicie y termine en un espacio en blanco. Sin embargo, esto no es suficiente, ya que la test
cadena también podría aparecer al principio o al final de la cadena que se está emparejando. Por lo tanto, uso la alternativa (indicada por |
) ^
para el inicio de la cadena y $
para el final de la cadena.
Actualización (después de 3 años +) ... Da la casualidad que necesitaba esta funcionalidad hoy, y me parece que, incluso mejor, una expresión regular es (^|/s|/W)test($|/s|/W)
( El carácter especial faltante / b expresión regular en Oracle ).
Tengo un problema para unir límites de trabajo con REGEXP_LIKE. La siguiente consulta devuelve una sola fila, como se esperaba.
select 1 from dual
where regexp_like(''DOES TEST WORK HERE'',''TEST'');
Pero también quiero hacer coincidir los límites de las palabras. Entonces, agregar los caracteres "/ b" da esta consulta
select 1 from dual
where regexp_like(''DOES TEST WORK HERE'',''/bTEST/b'');
Ejecutando esto, devuelve cero filas. ¿Algunas ideas?
En general, me quedaré con la solución de René, la excepción es cuando necesitas que el partido sea de longitud cero. es decir, no desea capturar realmente el carácter no verbal al principio / final.
Por ejemplo, si nuestra cadena es test test
, (/b)test(/b)
coincidirá dos veces, pero la (/b)test(/b)
(^|/s|/W)test($|/s|/W)
solo coincidirá con la primera ocurrencia. Al menos, ese es ciertamente el caso si intentas usar regexp_substr.
Ejemplo
SELECT regexp_substr(''test test'', ''(^|/s|/W)test($|/s|/W)'', 1, 1, ''i''), regexp_substr(''test test'', ''(^|/s|/W)test($|/s|/W)'', 1, 2, ''i'') FROM dual;
Devoluciones
test |NULL