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%.
3 Réponses :
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
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
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
Utiliser
SELECT REGEXP_REPLACE('name!surname','([[:punct:]])','\\\1') from dual
Voir la démo en ligne , résultat: p>
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.
Fait. Vérifier. :RÉ