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

Langage PHP Discussion :

Extraire un groupe [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Par défaut Extraire un groupe
    Bonjour,

    Je veux extraire le databaseName et le databaseHost de cette connectionString...

    Voici la string :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=ro_04;Data Source=test3\\SQLEXPRESS;;Connect Timeout=0"
    Pour le databaseName, avec quelques recherches, j'ai réussi à faire ceci, cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =(?<sqlServerName>.+);Initial Catalog=(?<databaseName>\w+);
    Par cointre pour le databaseHost (donc Data Source dans la string), je n'y arrive pas...

    Quelqu'un pourrait m'aider ?

    Merci !

    Bonne journée !

  2. #2
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    pour analyser cette chaine de caractères je pense que ça serait plus simple avec la fonction http://php.net/explode

  3. #3
    Membre chevronné Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Par défaut
    Petite Regexp toute simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Initial Catalog=)(.*?)(;)(Data Source=)(.*?)(;)
    Avec preg_match, les résultats seront dans la colonne 2 et 5 du tableau retourné.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Bonjour,



    Pouvez vous me confirmer que
    ?<sqlServerName>
    est un nommage du groupe matchant,
    de même que
    ?<databaseName>
    dans
    =(?<sqlServerName>.+);Initial Catalog=(?<databaseName>\w+);

    Je suis habitué aux regex en Python, dans lesquelles le nommage de groupe matchant se fait avec un P:
    (?P<sqlServerName>.+)
    (?P<databaseName>\w+)








    L’utilisation de \w+; par diaboloche (je sais, il y a une parenthèse entre + et ; mais...bref) me semble préférable à l’utilisation de .*?;
    car moins il y a de variabilité possible à trouver sur un caractère, plus la regex est rapide.



    Je crois aussi inutile de mettre
    InitialCatalog=
    Data Source=
    ;

    entre parenthèses. Ces segments n’ont aucune variabilité, il ne sert à rien de les capturer.





    Si le nom de Data Source contient \ comme seul autre caractère que des \w,
    on peut écrire la RE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Initial Catalog=(\w+);Data Source=([\w\\\\]+);
    Sinon il faudra effectivement écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Initial Catalog=(\w+);Data Source=(.+?);
    Et les deux noms voulus seront les deux seuls groupes capturés

  5. #5
    Membre chevronné Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Par défaut
    Cf la doc :
    Il est possible de nommer le sous-masque avec (?P<name>pattern) depuis PHP 4.3.3.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Merci.

    Mais que signifie donc
    (?<sqlServerName>.+)
    puisqu’il n’y a pas de P dans cette expression?



    Soit dit en passant, qu’est ce que ça veut dire: Smiley de Plomb 2009 ?

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

Discussions similaires

  1. [RegExp] Extraire des mots et groupes de mots
    Par jowsuket dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/09/2011, 22h30
  2. [REGEX] Comment extraire les named groups avant le match ?
    Par vmolines dans le forum Framework .NET
    Réponses: 0
    Dernier message: 08/07/2011, 10h26
  3. XML group by et extraire Datetime
    Par faraway dans le forum Développement
    Réponses: 0
    Dernier message: 03/09/2009, 17h40
  4. Réponses: 2
    Dernier message: 11/12/2008, 18h44
  5. Requête extraire n enregistrements par groupe lente
    Par MARCO63 dans le forum Requêtes et SQL.
    Réponses: 51
    Dernier message: 04/03/2008, 18h24

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