2017-10-17 1 views
1

J'ai essayé de trouver les dossiers qui ne sont pas imprimables (entre ASCII 32 à 127) ci-dessous je l'ai mentionné la selon la requête, il doit imprimer tous les enregistrements avec chr soit moins de 32 ou plus puis 127, mais il ne montre pas les enregistrements avec chr (160), alors qu'il ne montrent les enregistrements avec chr (10)oracle question d'expression régulière

select regexp_instr(a.COL, '[^[:print:]]$') as STRING_POSITION, 
     a.COL, dump(col) 
from tq84_compare a 
where regexp_instr(a.COL, '[^[:print:]]') > 0; 

insert into tq84_compare 
    values (11, chr(10)); 

insert into tq84_compare 
    values (11, chr(160)); 

insert en tq84_compare valeurs (101, 'on-line' || chr (160) || chr (160) || chr (160));

+1

160 est un espace difficile, non? Il est le comportement attendu depuis '[: print:]' 'matchs [\ x20- \ x7E]', l'espace et tous les autres caractères ASCII imprimables. –

+0

comment pouvons-nous l'enlever comme garniture car ne fonctionne pas sur chr (160) – ronil

+0

Voulez-vous dire que vous devez supprimer les espaces blancs de début/fin de l'entrée? –

Répondre

1

Vous ne pouvez pas faire correspondre un espace dur Unicode avec [:space:], ni [^[:print:]], ni \s.

Vous pouvez couper les cordes avec the following solution:

select regexp_replace(' some stuff  ', '^[[:space:] ]+|[[:space:] ]+$', '') as result from dual 

où l'espace est à l'intérieur d'un espace disque. Le ^[[:space:] ]+ correspond à tous les espaces ASCII et/ou des espaces difficiles au début de la chaîne et [[:space:] ]+$ correspond à tous les ASCII et caractères blancs d'un espace disque à la fin de la chaîne.

Si vous voulez ajouter un espace disque à votre [^[:print:]], vous devez utiliser une alternance:

select regexp_replace(' some stuff  ', '^([^[:print:]]| )+|([^[:print:]]| )+$', '') as result from dual 

Voir this online demo.

Code