Oracle
 sql >> Database >  >> RDS >> Oracle

espressione regolare per parole lunghe diverse separate da righe

È a causa della tua espressione regolare. Cambialo per cercare solo caratteri alfabetici consecutivi:

 select regexp_substr('abc
 def
 ghi', '[[:alpha:]]+', 1 ,level)
   from dual
connect by regexp_substr('abc
def
ghi', '[[:alpha:]]+', 1 ,level) is not null

Funziona anche per singoli caratteri:

select regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level)
from dual
     connect by regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level) is not null;

Hai commentato:

Per favore, inserisci sempre tutte le informazioni nella domanda per cominciare, per favore.

Sembra che tu stia cercando di dividere su un carattere di nuova riga (ritorno a capo o ritorno a capo/avanzamento riga)

Nel qual caso stai cercando di dividere dove qualcosa non uno di questi personaggi. Ho usato tutti i caratteri di controllo qui perché sono pigro ma funzionerà con i dati forniti. Se hai dei personaggi Bell, questo non funzionerà, dovrai essere più specifico.

with the_data as ( 
select 'a
b
c' as dat
  from dual
       )
 select regexp_substr(dat, '[^[:cntrl:]]+', 1 ,level)
  from the_data
connect by regexp_substr(dat, '[^[:cntrl:]]+', 1 ,level) is not null;