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 :

preg_replace ne trouve pas première occurence


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut preg_replace ne trouve pas première occurence
    Je cherche à inséser un champs à la volée dans les requette mysql de creattion de table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
        $query="CREATE TABLE  `3crealivres_new`.`tmp_1`(`rt` INT( 1 ) NOT NULL) ENGINE = MYISAM ;";
        echo "<pre> . $query . "\n";
        $pattern = '/ *(create +table *.+\()(.+)/i';
        if (preg_match($pattern, $query)) echo "VRAI "; else echo "FAUX ";
        $query =  preg_replace($pattern, '$1`bdd_sync` DATETIME NOT NULL, $2', $query);
        echo "\n".$query . "\n";
    ?>
    j'obtiens
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE  `3crealivres_new`.`tmp_1`(`rt` INT(`bdd_sync` DATETIME NOT NULL,  1 ) NOT NULL) ENGINE = MYISAM ;
    au lieu de
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE  `3crealivres_new`.`tmp_1`(`bdd_sync` DATETIME NOT NULL, `rt` INT( 1 ) NOT NULL) ENGINE = MYISAM ;

    Je ne comprends pas pourquoi.
    Impossible de détecter la première parenthèse.
    Merci de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 403
    Points : 15 768
    Points
    15 768
    Par défaut
    c'est parce que l'expression régulière est en mode "vorace" et donc la 1re capture s'arrête à la dernière parenthèse
    regardez là pour voir ce que ça donne en couleur :
    https://regex101.com/r/wG6qB3/1

    Et donc pour rendre cette expression "non vorace", il suffit de rajouter un "U" dans les options
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/ *(create +table *.+\()(.+)/Ui';

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    merci :-)

  4. #4
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    ca marche bien sur la page de test mais pas dans mon code php.
    plus simple a priori:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $a = "Manuel élémentaire à l'usage des candidats au cap coiffure pour dames
    - coiffure pour messieurs ( 2 fascicules) I : l'embellissement de la
    chevelure, le traitement capillaire, II la mise en beauté";
    Je veux:
    Manuel élémentaire à l'usage des candidats au cap coiffure pour dames

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo preg_replace("/.+\n(.+)/U", '$1', $a);

Discussions similaires

  1. [XL-2013] Erreur sur la première occurence trouvée avec Find
    Par defluc dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/08/2013, 11h52
  2. je ne trouve pas la bonne syntaxe
    Par poelvo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/08/2003, 01h30
  3. [TP]trouve pas le graph.tpu
    Par kaygee dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 13/06/2003, 12h49
  4. Première occurence d'une donnée
    Par bob33 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/06/2003, 13h50
  5. [Kylix] [cgi] ne trouve pas libsqlmy.so.1 !
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 04/07/2002, 15h15

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