Oracle
 sql >> Base de données >  >> RDS >> Oracle

expression régulière pour les lignes séparées par différents mots longs

C'est à cause de votre expression régulière. Modifiez-le pour rechercher juste caractères alphabétiques consécutifs :

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

Cela fonctionne également pour les caractères uniques :

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

Vous avez commenté :

Veuillez toujours mettre toutes les informations dans la question pour commencer s'il vous plaît.

Vous semblez chercher à fractionner sur un caractère de saut de ligne (retour chariot ou retour chariot/saut de ligne)

Dans ce cas, vous cherchez à diviser là où quelque chose n'est pas un de ces personnages. J'ai utilisé tous les caractères de contrôle ici parce que je suis paresseux mais cela fonctionnera pour vos données fournies. Si vous avez des personnages Bell, cela ne fonctionnera pas, vous devrez être plus précis.

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;