IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Expression régulière / chaine optionnelle


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 94
    Par défaut Expression régulière / chaine optionnelle
    Bonjour,

    Est-il possible de rendre optionnel une chaine de caractère ?
    Je n'ai pas trouvé comment même en m'inspirant de
    http://www.psoug.org/reference/regexp.html


    Soit les chaines suivantes
    TO8 LT34
    45(TO8_LT34)
    (TO8-LT34)
    TO8LT34-C
    45(TO8LT34)-I
    (TO8_LT34)-S
    TO8-LT34(25)
    45(TO8LT34)(25)-S
    (TO8 LT34)(25)-I

    je veux récuperer les deux valeurs 8 et 34 qui peuvent etre toutes deux une chaine digit de longueur variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select REGEXP_REPLACE (monchamp,'^[[:digit:]]*[(]?TO([[:digit:]]+)[_- ]?LT([[:digit:]]+[)]?)[(]?[[:digit:]]*[)]?[-C]?[-I]?[-S]?$','\2-\3') from matable;
    ne marche pas car [-C]?[-I]?[-S]? n'est pas bon, en fait il me faudrait qqchose comme ça mais oracle n'aime pas

    [(-C)|(-I)|(-S)]?
    en utilisant le ? pour facultatif et le | pour soit chaine A soit chaine B soit chaine C soit aucune. Est-ce possible ?

    Enfin, Je suis preneur de toute optimisation pour mon expression ...

    Merci

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    regexp_replace('45(TO8LT34)(25)-S',
    '^[[:digit:]]*\(?TO([[:digit:]]+)[ _-]?LT([[:digit:]]+)\)?(\([[:digit:]]+\))?(-C|-S|-I)?','\1 \2')

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 94
    Par défaut
    Super !

    La deuxième expression marche aussi

    merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Expression régulière : chaine sur plusieurs lignes
    Par djibril dans le forum Langage
    Réponses: 1
    Dernier message: 13/03/2014, 13h00
  2. expression régulière : chaine de remplacement
    Par maa dans le forum Visual C++
    Réponses: 6
    Dernier message: 17/02/2008, 16h47
  3. [RegEx] Expression régulière et longueur de chaine
    Par cbroissa dans le forum Langage
    Réponses: 30
    Dernier message: 23/05/2006, 19h33
  4. Réponses: 11
    Dernier message: 24/03/2006, 11h12
  5. Réponses: 7
    Dernier message: 27/10/2005, 19h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo