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 :

Expression Régulière - preg_match_all


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2019
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Expression Régulière - preg_match_all
    Hello

    J'ai un petit soucis avec un code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $txt = '@(bouton@@lien1@@texte1@@)@
    <br />
    @(bouton@@lien2@@texte2@@)@';
    echo $txt;
     
    echo '<hr />';
     
    $txt = str_replace(array("\n", "\r"), '', $txt);
    $tab = preg_match_all('|@\(bouton@@.*\)@|', $txt, $results);
    var_dump($results);

    Je voudrais que le code récupère chaque itération de mes "boutons" pour que je puisse les traiter dans une boucle,
    mais il détecte les 2 correspondants à une itération.

    Vous pourriez m'aider svp ?

    Résultats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @(devis@@lien1@@texte1@@)@
    @(devis@@lien2@@texte2@@)@
     
    array(1) { [0]=> array(1) { [0]=> string(70) "@(devis@@lien1@@texte1@@)@
    @(devis@@lien2@@texte2@@)@" } }

  2. #2
    Membre habitué Avatar de two3d
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2012
    Messages : 126
    Points : 168
    Points
    168
    Par défaut
    Utilise l'option (drapeau/flag) U, "non gourmand" qui s'arrêtera à la première ).

    Remarque : le délimiteur |, je ne connais pas, les plus courants sont # ou /.

    https://www.php.net/manual/fr/regexp...delimiters.php

  3. #3
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Bonjour,

    Je confirme la modif de @two3d (U = ungreedy) (greedy étant "gourmand", ungreedy étant "non-gourmand" comme il l'a si bien dit ^^)

    Concernant les délimiteurs, on peut effectivement mettre n'importe quoi mais habituellement on le change pour se faciliter la tâche, pas se la compliquer
    C'est d'ailleurs pour ça que souvent on va utiliser # à la place de /, histoire de ne pas devoir échapper les slashs (qui existent très souvent en web)
    Mais utiliser le pipe (|) est fortement déconseillé étant donné qu'il a déjà une signification dans les regex

    (d'ailleurs, j'ai testé d'utiliser ce délimiteur avec un "ou" (|(bou\|ton)|U) => impossible d'avoir un résultat)

  4. #4
    Membre habitué Avatar de two3d
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2012
    Messages : 126
    Points : 168
    Points
    168
    Par défaut
    Yes Si la regex doit utiliser le délimiteur, utilisez-en un autre.

    Citation Envoyé par la doc
    Un délimiteur peut être n'importe quel caractère non alpha-numérique autre qu'un backslash ou qu'un espace.

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 888
    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 888
    Points : 6 632
    Points
    6 632
    Par défaut
    Citation Envoyé par two3d Voir le message
    Citation Envoyé par la doc
    Un délimiteur peut être n'importe quel caractère non alpha-numérique autre qu'un backslash ou qu'un espace.
    Les caractères possibles comme délimiteurs sont en couleur:
    Dec Hex    Dec Hex    Dec Hex  Dec Hex  Dec Hex  Dec Hex   Dec Hex   Dec Hex  
      0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p
      1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q
      2 02 STX  18 12 DC2  34 22 "  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r
      3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s
      4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t
      5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u
      6 06 ACK  22 16 SYN  38 26 &  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v
      7 07 BEL  23 17 ETB  39 27 '  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w
      8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x
      9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y
     10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z
     11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {
     12 0C FF   28 1C FS   44 2C ,  60 3C <  76 4C L  92 5C \  108 6C l  124 7C |
     13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }
     14 0E SO   30 1E RS   46 2E .  62 3E >  78 4E N  94 5E ^  110 6E n  126 7E ~
     15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL
    ainsi que les octets de 128 à 255.

    Avec une petite précision tout de même concernant les parenthèses: si on choisit une parenthèse ouvrante comme délimiteur de pattern, le délimiteur de fin doit être une parenthèse fermante. Par contre on peut délimiter avec deux parenthèses fermantes (une au début, une à la fin). Cela vaut pour les parenthèses, mais aussi les accolades { }, les crochets [ ] et même < >.

    On ne peut pas utiliser de caractères multibyte comme délimiteur.

Discussions similaires

  1. [PHP 5.6] preg_match_all et expression régulière
    Par dominos dans le forum Langage
    Réponses: 5
    Dernier message: 29/06/2020, 19h10
  2. [RegEx] expression régulière preg_match_all
    Par freaks dans le forum Langage
    Réponses: 2
    Dernier message: 16/11/2012, 00h02
  3. [RegEx] [HTML PARSER] expression régulière avec preg_match_all
    Par Exca dans le forum Langage
    Réponses: 13
    Dernier message: 22/10/2011, 11h31
  4. Expression régulière preg_match_all()
    Par madislak dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 19/04/2009, 11h25
  5. [RegEx] Expression régulière avec preg_match_all
    Par tit_oune dans le forum Langage
    Réponses: 6
    Dernier message: 18/05/2006, 23h28

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