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 :

Récupérer une chaine entre parenthèses [RegEx]


Sujet :

Langage PHP

  1. #1
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut Récupérer une chaine entre parenthèses
    Bonjour

    N'ayant absolument aucune connaissance en regex je sollicite votre aide pour extraire une chaine de caractères.

    Mettons qu'on ait un texte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Titre Textetexte. (Dessin).
    J'ai besoin de récupérer ce qu'il y a entre les parenthèses, avec les parenthèses incluses. J'ai donc besoin de récupérer (Dessin)

    Attention, il peut y avoir plusieurs séries de parenthèses. On peut avoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Titre (blabla) Texte  (blabla)  Texte (Dessin).
    Mais dans tous les cas, j'ai besoin de récupèrer ce qu'il y a entre les dernières parenthèses et uniquement celles-ci. C'est là la difficulté. Donc en l'occurrence (Dessin).

    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est là la difficulté
    Ce n'est pas une difficulté : si tu recuperes tous les contenus, tu auras le dernier aussi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $string = 'Titre (blabla) Texte  (blabla)  Texte (Dessin).';
    preg_match_all("#(\(.+)\)#isU", $string, $output);
    echo array_pop($output);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Vu qu'il y a plein de manières de le faire, j'ai testé plusieurs méthodes. Voici les trois meilleurs en terme de vitesse (de la plus rapide à la moins rapide):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tmp1 = strrchr($str, '(');
    $res1 = substr($tmp1, 0, strpos($tmp1, ')') + 1);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tmp6 = strrpos($str, '(');
    $res6 = substr($str, $tmp6--, strrpos($str, ')') - $tmp6);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    preg_match('~\)[^(]*\(~', strrev($str), $m5);
    $res5 = strrev($m5[0]);
    Pour les deux premières méthodes, le temps de réponse reste quasi invariable même avec une chaîne 100000 fois plus longue, et ce, de par le fait qu'elles s'appuient sur une recherche à partir de la fin de la chaîne.
    La troisième méthode quant à elle, recherche le motif au début de la chaîne retournée. Retourner une chaîne est une opération extrêmement rapide, mais le coût commence à se faire sentir pour une chaîne 150 fois plus longue. En-deçà, bien que plus lente que les deux premières, elle a un temps de réponse du même ordre. Par contre et contrairement aux deux premières, elle a l'avantage de fonctionner même s'il y a des parenthèses orphelines à la fin de la chaîne.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    merci pour vos réponses.
    En général, les chaines font 100 caractères. Pas plus.

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

Discussions similaires

  1. [RegEx] comment récupérer une chaine entre deux mots
    Par mat8883 dans le forum Langage
    Réponses: 3
    Dernier message: 14/11/2012, 19h29
  2. extraction d'une chaine entre parenthéses
    Par gastoncs dans le forum VB.NET
    Réponses: 2
    Dernier message: 15/11/2011, 11h08
  3. [RegExp] Récupérer une chaine entre deux délimiteurs
    Par Soncar dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 22/02/2011, 21h07
  4. Extraire une chaine entre parenthèse
    Par flo73 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 16/10/2010, 12h14
  5. Réponses: 6
    Dernier message: 17/02/2010, 19h48

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