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 :

Additionner des "variables regex" + "variable php" [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Points : 2 399
    Points
    2 399
    Par défaut Additionner des "variables regex" + "variable php"
    Bonjour,

    J'ai une regex de cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo preg_replace(
    		'#\^LH([0-9]+),([0-9]+)\^#',
    		'^LH$1,$2^',
    		'^XA^LRN^FWN^CFD,24^LH10,10^CI0^PR2^MNY^MTT^MMT^MD15^PON^PMN'
    );
    Soit détecter : '^LH10,10^' pour y remplacer les valeurs 10,10 que je récupere via les variables regex $1 et $2.

    Est il possible d'additionner ces variables à des variable php directement dans la regex ?
    Par exemple, j'ai une variable php $a qui contient la valeur 5.
    $1 + $a = 15.

    Merci

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Voui, c'est possible, via l'option 'e' qui éxécute du php au moment du remplacement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $a = 5;
    $str = '^XA^LRN^FWN^CFD,24^LH10,10^CI0^PR2^MNY^MTT^MMT^MD15^PON^PMN';
    $reg = '#\^LH([0-9]+),([0-9]+)\^#e';
     
    $replacement = "'LH^'.('$1'+$a)";
     
    echo preg_replace($reg, $replacement, $str);
    Comme tu peux le voir, la seule difficulté est de jongler entre les quotes et les guillemets.

    PS : ne pas abuser de cette option 'e' qui est perfophage !

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    preg_replace_callback ne serait pas plus appropriée ?

  4. #4
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Points : 2 399
    Points
    2 399
    Par défaut
    Super, merci

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    preg_replace_callback ne serait pas plus appropriée ?
    Pour des traitements aussi simples qu'une addition ou une concaténation, il n'est pas vraiment utile de passer par un callback explicite.
    C'est un avis, non une affirmation : je n'ai pas testé les différences de perfs, mais ça ne doit pas être énorme.

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    d'après ce que j'ai pu lire le preg_replace_call_back ne réinterprète par l'expression regulière pour chaque occurrence, donc plus il y a d'occurrences, plus elle prend l'avantage sur le modifier e

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    C'est vrai, et je viens de faire un petit test, il y a quand même un net avantage pour le callback explicit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
    $a = 5;
    $str = '^XA^LRN^FWN^CFD,24^LH10,10^CI0^PR2^MNY^MTT^MMT^MD15^PON^PMN';
     
    $replacement = "'LH^'.('$1'+$a).',$2'";
    function myF($m) { return sprintf('LH^%d,%d', $m[1] + 5, $m[2]); }
     
    for ($j=1; $j<20; $j++) {
        $reg = '#\^LH([0-9]+),([0-9]+)\^#e';
     
        $start = microtime(true);
        for ($i=1; $i<10000; $i++)
            preg_replace($reg, $replacement, $str);
        $end = microtime(true);
        echo ($end - $start)."\n";
     
        $reg = '#\^LH([0-9]+),([0-9]+)\^#';
     
        $start = microtime(true);
        for ($i=1; $i<10000; $i++)
            preg_replace_callback($reg, 'myF', $str);
        $end = microtime(true);
        echo ($end - $start)."\n";
     
        echo "\n";
    }
    Mais bon, je répète 20 fois une boucle de 10000 remplacement.
    Pour un remplacement, ça se joue quand même en dixièmes de microsecondes...

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

Discussions similaires

  1. [WD18] Additionner des variables
    Par gwendoline-bricout dans le forum WinDev
    Réponses: 2
    Dernier message: 21/06/2013, 09h52
  2. [RegEx] Regex avec virgule dans double quotes
    Par LeHibou2 dans le forum Langage
    Réponses: 2
    Dernier message: 16/12/2012, 20h16
  3. Additionner des variables
    Par csilas dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 03/02/2010, 07h27
  4. Variable d'une clause where avec quote
    Par kcizth dans le forum Langage SQL
    Réponses: 1
    Dernier message: 17/04/2008, 15h43
  5. Additionner des variables
    Par nebule dans le forum Struts 1
    Réponses: 1
    Dernier message: 18/01/2007, 16h48

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