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 :

Regex : généralisation d'un remplacement numérique [Fait]


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de dark_vidor
    Homme Profil pro
    Élève
    Inscrit en
    Janvier 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Élève

    Informations forums :
    Inscription : Janvier 2005
    Messages : 321
    Points : 118
    Points
    118
    Par défaut Regex : généralisation d'un remplacement numérique
    j'aimerai généraliser un remplacement de caractère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $line = '24';
    $text = "Erreur de syntaxe près de '' à la ligne 1";
    $text = ereg_replace("ligne 1", "ligne ".$line, $text);
    ou "erreur de syntaxe" est en faite le retour de mysql_error();
    et ou $line est la vraie ligne d'erreur retourner par __LINE__

    Je suis en train de créer une fonction de gestion des erreurs sql parce que le mysql_error(); ... s'est bien mais pour debuger vraiment corectement et rapidement c'est pas terrible notement avec le numéro de ligne retourné qui n'est pas le bon

    je voudrais generaliser le remplacement de la ligne fournit par le mysql_error() par celle fournit par __LINE__

    exemple
    Erreur de syntaxe près de '' à la ligne 1 Erreur de syntaxe près de '' à la ligne 25

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    et... ca ne marche pas ? je vois pas de questions là

  3. #3
    Membre régulier Avatar de dark_vidor
    Homme Profil pro
    Élève
    Inscrit en
    Janvier 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Élève

    Informations forums :
    Inscription : Janvier 2005
    Messages : 321
    Points : 118
    Points
    118
    Par défaut
    bon je recommence plus clairement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $text = "Erreur de syntaxe près de '' à la ligne 1";
    on ne connait pas la ligne d'erreur a l'avance
    ça peut etre ligne 1, ligne 127, ligne 3052, ...

    sauf que : la ligne retournée par le mysql_error(); et la ligne dans mon code n'est jamais la meme ! j'aimerais donc remplacer la ligne retournée par mysql_error par la constante __LINE__

    alors forcément dans le cas ci dessus ça fonctionne puisque je met texto ce qu'il faut remplacer ... sauf que j'aimerais que ça le fasse tout le temps quelques soit le numéro de ligne mysql_error

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ereg_replace("ligne [numero]", "ligne ".$line, $text);
    je creer une fonction sql_error pour gerez les erreurs enfin pour debuger plus rapidement (suivant la regle2 c'est elle qui m'a donnée cette idée)

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    ok ;o)

    Je pense quand meme tu devrais garder le numero de ligne mysql, au cas ou, ca pourrait etre utile un jour, genre afficher "ligne 32(1)" ou "ligne 32-1" au lieu de "ligne 1"

    Pour cela, en preg :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $texte=preg_replace("#ligne ([0-9]+)$#", "ligne $line ($1)", $texte)

  5. #5
    Membre régulier Avatar de dark_vidor
    Homme Profil pro
    Élève
    Inscrit en
    Janvier 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Élève

    Informations forums :
    Inscription : Janvier 2005
    Messages : 321
    Points : 118
    Points
    118
    Par défaut
    pouriez vous m'expliquer #ligne ([0-9]+)$#

    parce que a chaque fois que je veux faire une opération du type remplacement comme ça j'suis tjrs embetter parce que je sais pas me servir de ce qu'on doit mettre a l'intérieur

    merci


    edit :

    voici ce que j'ai cré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function SQL_Error($file, $line, $query, $error)
    {
    	$log_file = fopen("log.txt","a+");
    	$result = '['.date("d-m-Y H:i:s").']|'.$file.'|'.$query.' : '.preg_replace("#ligne ([0-9]+)$#", "ligne $1 (ligne ".$line.")", $text)."\n" ;
    	fwrite($log_file, $result);
    	fclose($log_file);
    	exit();
    }
     
     
    mysql_query($query) or SQL_Error($_SERVER['PHP_SELF'], __LINE__, $query, mysql_error());
    si vous voyez une optimisation (je sais le preg dans le coup sert plus à grand chose mais bon tant pi je pensais pas que ça pouvais être utile de garder la ligne retourner par mysql_error qui est erroné ... ^^

    n'empeche que je veux bien comprendre comment ça marche le premier parametre dans ereg, preg ...

  6. #6
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    parce que a chaque fois que je veux faire une opération du type remplacement comme ça j'suis tjrs embetter parce que je sais pas me servir de ce qu'on doit mettre a l'intérieur
    les regex ca s'apprend : http://www.expreg.com/
    (d'autre tuto sont sur developepz.com)

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    En effet, il y a par exemple ce tutoriel : Initiation aux expressions régulières en PHP

  8. #8
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    alors en gros :

    #...# sert a délimiter l'expression réguliere, ce n'est pas utilisé par ereg. On peut utiliser #, ou bien / ou bien d'autres caracteres, c'est au choix ;o)

    [] défini un ensemble de caracteres possibles
    0-9 veux dire : un caractere entre 0 et 9
    + veux dire : 1 ou plusieurs caracteres précédents (donc ici, 1 ou plusieurs caractere parmis l'ensemble composé des caracteres entre 0 et 9 : donc un nombre ;o)
    $ veux dire que l'on doit atteindre la fin de la chaine, donc que les chiffres devront etre collés a la fin du message d'erreur.
    () correspond a une "capture", on décide donc de capturer (=sauvegarder) le numero de la ligne mysql (si on avait pas capturé le +, on aurait eu que le premier chiffre de la ligne)

    Dans la chaine de remplacement, $1 sera remplacé par le 1er texte capturé. On peux aussi ecrire \1 c'est a chacun de faire selon ses préférences ;o)

    Les regexp sont un monde a part... et il faut s'y plonger... mais une fois qu'on connait un peu, on fait vraiment beaucoup de chose dans la manipulation des chaines de caracteres ;o)

  9. #9
    Membre régulier Avatar de dark_vidor
    Homme Profil pro
    Élève
    Inscrit en
    Janvier 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Élève

    Informations forums :
    Inscription : Janvier 2005
    Messages : 321
    Points : 118
    Points
    118
    Par défaut
    bon ça j'imprime et j'apprend par coeur ^^

    merci j'ai compris l'appliquer correctement ça va etre autre chose mais j'ai compris le principe


    bon sinon ma fonction vous en pensez quoi ?

Discussions similaires

  1. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 17h40
  2. Erreur 233 sous sql server
    Par brajae85 dans le forum Oracle
    Réponses: 3
    Dernier message: 18/05/2009, 16h12
  3. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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