1
votes

Expression régulière renvoyant un caractère échappé

Est-il possible d'échapper à un ensemble de caractères avec une expression régulière.

Un exemple:

SELECT regexp_replace('name!surname?', '[^a-zA-Z\d\s:]', '#') from sys.dual;

L'idée est d'échapper à tous les caractères non alphanumériques, je sais comment écrire une expression régulière pour les trouver mais vraiment avoir du mal à s'échapper.

Utilisation du SQL d'Oracle avec REGEXP_REPLACE():

Input: name!surname
Output: name\!surname

Le résultat ressemblerait à nom # nom de famille # mais j'aimerais savoir s'il est possible d'obtenir quelque chose comme nom \! Nom de famille \? .

J'ai besoin d'échapper à tous les caractères non alphanumériques pour Oracle Text pour analyser une requête.

Je ne peux pas utiliser {} pour l'échappement multiple car il ne fonctionne pas avec le caractère générique%.


1 commentaires

Fait. Vérifier. :RÉ


3 Réponses :


2
votes

Vous pouvez utiliser une double barre oblique inverse avant \ 1 comme troisième argument, avec [^ [: alnum:]] posix (le [: espace: ] posix juste avant le crochet fermant et les parenthèses doit supprimer la barre oblique inverse en remplaçant par des espaces):

select regexp_replace('name!surname','([^[:alnum:][:space:]])','\\\1') 
  from dual

Démo


2 commentaires

Comment exclure {} de l'expression régulière?


si vous voulez extraire nom \ {} nom en conséquence, ajouter une accolade fermante } après [: space:] posix tel que '([^ [: alnum:] [: space:]}])' devrait suffire @ dmak2709



1
votes

Enveloppez le groupe de caractères que vous essayez de faire correspondre dans un groupe de capture, puis utilisez \\\ 1 comme remplacement. \\ est une barre oblique inverse et \ 1 insérera le contenu du premier groupe de capture:

| REPLACEMENT     |
| :-------------- |
| name\!surname\? |

Sorties:

SELECT regexp_replace('name! surname?', '([^a-zA-Z0-9[:space:]:])', '\\\1')
       AS replacement
from sys.dual;

db fiddle ici


0 commentaires

1
votes

Utiliser

SELECT REGEXP_REPLACE('name!surname','([[:punct:]])','\\\1') from dual

Voir la démo en ligne , résultat: p>

 entrez la description de l'image ici

Le modèle est ([[: punct:]]) , un groupe de capture unique qui correspond un seul caractère de ponctuation ou de symbole. Le remplacement est une barre oblique inverse + la valeur du groupe.

Notez que \ dans le modèle de remplacement est un caractère spécial, il est utilisé pour introduire des espaces réservés , références arrière de remplacement , par conséquent, il doit être échappé lui-même pour produire une barre oblique inverse littérale dans la chaîne résultante.


0 commentaires