-1
votes

Comment utiliser regexp_substr

J'ai besoin d'extraire une sous-chaîne d'une longue chaîne. J'ai essayé la requête suivante mais ne fonctionne pas, ça me retourne null, Je veux extraire la première valeur 12 entre le et xxx

i obtenir en conséquence rossi mais je veux aussi éliminer également le , toute suggestion?


1 commentaires

Qui suivant la requête? S'il vous plaît nous fournir votre code.


3 Réponses :


0
votes

Vous pouvez obtenir rossi en utilisant xxx

voir le Démo oracle en ligne .

Le ([^ <] *) REGEX correspondent , Ensuite, capte en groupe 1 n'importe quel zéro ou plus de caractères autres que << / code>, puis correspond à . Seule la partie capturée est renvoyée en raison du dernier argument 1 .


2 commentaires

Cela ne correspond à rien si l'élément CN contient des balises imbriquées telles que rossi DB <> violon .


@ Mt0 Les étiquettes Les spectacles ne sont pas imbriqués. Sinon, aucune regex à Oracle pourrait aider et je n'aurais pas partagé cette solution.



0
votes

Utilisez une subexpression (un groupe correspondant conçu entre parenthèses) pour saisir ce que vous souhaitez:

SELECT REGEXP_SUBSTR('<CC>3</CC><CN>ROSSI</CN><NO>MARIO</NO><IN>VIA DELLE MIMOSE 4</IN>',
                     '<CN>(.*?)</CN>', 1, 1, NULL, 1) 
  FROM DUAL;


2 commentaires

S'il y a une autre balise dans l'entrée, cela ne fonctionnera pas DB <> violon .


OK - alors faites la sous-expression non gourmande. Corrigé la réponse et modifié le violon pour montrer comment la sous-expression gourmande d'origine ne fonctionnerait pas comme si vous le souhaitez s'il y avait plusieurs ' S dans les données (qui, bien sûr, est Pas ce que OP a montré, mais je suis le jeu :-) et comment utiliser une sous-expression non gourmande le rend heureux. Bien sûr, il ne capture pas le second et suivant des paires, mais comme nous sommes quelque peu loin de la question initiale, nous laisserons la solution à ce problème comme un exercice pour le lecteur motivé. :-)



5
votes

n'utilisez pas une expression régulière pour analyser les données XML; Utilisez un analyseur XML approprié:

CC | CN    | NO    | IN                
-: | :---- | :---- | :-----------------
 3 | ROSSI | MARIO | VIA DELLE MIMOSE 4


3 commentaires

Bon +1, je me demande pourquoi les gens stockent / traitent XML en tant que chaîne. Bat le but!


"Utilisez un parseur XML approprié" +1


Juste - au nom de tout ce qui est bon dans le monde! - N'essayez pas d'analyser HTML avec une regex !!!!