begin process at 2012 02 15 23:29:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

Problème de regexp


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de regexp

mercredi 6 mai 2009 à 19:00:05 | Problème de regexp

christophedlr

Membre Club
Bonsoir,

Je voudrais faire mon propre générateur de documentation PHP.
J'ai donc effectuer des tests pour voir si j'étais capable en prenant un code source PHP, de retrouver les commentaires types /** */ définissant donc la documentation (type Java).

Actuellement j'arrive dans mes test à prendre un commentaire et le parser mais seulement si il n'y à qu'une section, j'explique.
Un commentaire :
/**
 * @version 1.0
*/

J'arrive à le parser sans problème, ici c'est l'exemple de la version (j'ai testé en premier l'exemple du tag author), mais si on ajoute un second tag dans le commentaire, ça fonctionne plus.

Je pense donc avoir un problème au niveau de mon regexp.

Voici le code que j'ai fait actuellement :
<?php

$file = file_get_contents('test.php');

if ( preg_match_all("#\/\*\*\n[ ](.+)\n\*\/#", $file, $matches, PREG_SET_ORDER) )
{
    //print_r($matches);
    //echo count($matches[0]);
    $line = substr($matches[0][1], 2);
   
    $tok = strtok($line, ' ');
    if ($tok === '@author')
    {
        echo "<b>Auteur :</b><br />\r\n";
        echo substr( $line, strlen($tok)+1 );
    }
   
    else if ($tok === '@version')
    {
        echo "<b>Version :</b><br />\r\n";
        echo substr( $line, strlen($tok)+1 );
    }
}

?>

Avec mon regexp actuel, j'interdit les commentaires sur une seule ligne (donc mettre /** * @version 1.0 */ par exemple), il doit bien y avoir un espace en début de ligne mais j'arrive pas en plus de gérer plusieurs tags dans le même commentaire, j'arrive pas à indiquer qu'il faut obligatoirement un espace ET une astérisque.

Je pense donc que c'est le regexp qui est pas totalement bon.


Merci d'avance pour votre aide.
jeudi 7 mai 2009 à 15:15:34 | Re : Problème de regexp

alexflex25

Réponse acceptée !
Après 1 heure de réflexion: je ne peux même pas t'apporter la solution.
Cependant voici une piste:
 
$fic = "./test.php";
$file = file_get_contents($fic);

if ( preg_match_all('#/\*\*[^/]*\*[ ]*/#',trim(str_replace(chr(13).chr(10),"",$file)),$matches) ){   
    foreach($matches[0] as $match){
        preg_match_all('#@[a-z]+[^\*]*#',$match,$commentaires);
        foreach($commentaires[0] as $commentaire ){
            list($nom,$valeur) = split(" ",$commentaire,2);
            echo substr(trim($nom),1)." : ".trim($valeur)."<br />";
        }
    }
}

vendredi 8 mai 2009 à 14:30:50 | Re : Problème de regexp

kohntark

Membre Club
Réponse acceptée !
Salut,

Après 4 minutes et 38 secondes j'ai pu t'apporter la solution, contrairement à Alexflex qui semble bien peu performant :

test.php :
/**
 * @version 1.0
 * @author machin tttttt
*/
fsdfsdfsd
fsdfhskjlhf sdfjshd fkjsdh fkjsdhf s
/**
 * @trucmuche trucbidule
 * @bidule truc
*/


$file = file_get_contents('test.php');

$reg = "`\/\*\*\r\n([^\/]+)\*\/`";

if (preg_match_all($reg, $file, $matches, PREG_PATTERN_ORDER)) {   
  foreach ($matches[1] as $v) {
    $reg = '`\s\*\s(@[^*]+)\r\n`';
    preg_match_all($reg, $v, $m, PREG_PATTERN_ORDER);
     
    foreach ($m[1] as $u) {
      $comment = substr($u, 0,strpos($u, ' '));
      $value = substr($u, strpos($u, ' '));
       
      switch ($comment) {
        case '@author':
        echo 'Auteur : '.$value.'<br />';
        break;
         
        case '@version':
        echo 'Version : '.$value.'<br />';
        break;
         
        case '@bidule':
        echo 'Bidule : '.$value.'<br />';
        break;
         
        case '@trucmuche':
        echo 'Trucmuche : '.$value.'<br />';
        break;
      }
    }
  }
}


La vérité :
J'ai galéré bien plus d'une heure à tenter de trouver une regex adéquate avec un succès relatif.
J'ai conservé ta recherche sur des strings bien déterminées (@version, @author) afin de pouvoir les identifier et ainsi de leur appliquer un traitement éventuel. Il est bien évidemment possible de ne pas tester leur existence ce qui rendra le code bien plus court.
J'ai fait les tests sous windows, ce qui explique les \r\n (à modifier au cas où).

@alexflex :
Tu auras compris que la phrase à ton sujet relève de la plaisanterie amicale
D'ailleurs je ne voulais pas poster mon code car je me disais que quelqu'un trouverait surement une meilleure solution que moi.
En découvrant aujourd'hui ta réponse j'étais parti pour poster "bien vu Alexflex, je n'avais pas trouver ... patati patata" ... mais je le poste tout de même car ton code ne gère pas, nottament, les commentaires sur une seule ligne.

Bref, j'espère qu'une des deux répondra à la demande, même si je reste certain qu'il est possible de faire bien mieux (un peu plus de spécifications Christophedlr ?)

Cordialement,


Kohntark -

vendredi 8 mai 2009 à 15:08:02 | Re : Problème de regexp

christophedlr

Membre Club
Merci pour ta solution Korhntark, elle à l'air plus clair que celle d'alex (pour le regexp, je le comprend un peu mieux ;)).

Pour la gestion sur une seule ligne, en tous cas pour le moment je compte pas gérer cela car actuellement aucun générateur ne le gère (me semble pas que la JavaDoc le gère et je prend le générateur de doc Java de Sun comme exemple ;)).

Les \r\n sont inutiles, disons que un fichier encodé au format Unix aura juste le \n, donc à la limite ont se fiche du \r, c'est le \n je pense qui est important ;)

Bon sinon, merci pour vos solutions à tous les deux qui ont l'air de bien fonctionner.
Je vais étudier tous cela attentivement.
dimanche 10 mai 2009 à 20:51:15 | Re : Problème de regexp

alexflex25

"Après 4 minutes et 38 secondes j'ai pu t'apporter la solution, contrairement à Alexflex qui semble bien peu performant :"

Quand j'ai lu cette phrase je me suis dis 4min 38....
wouaaaaa.. INCREDIBLE!!!

Ne t'inquiète pas kohntarkj'adore les gens qui ont plus de compétences que moi.
Sa m'aide à avancer!
C'est de bonne guerre... De plus ton humour me plais.

dimanche 10 mai 2009 à 20:57:28 | Re : Problème de regexp

christophedlr

Membre Club
Remarque c'est toujours utile d'avoir un peu d'humour ;)


Cette discussion est classée dans : problème, version, echo, tok, regexp


Répondre à ce message

Sujets en rapport avec ce message

problème avec id resource, non compris!!! [ par titigrou ] kikou!!j'ai un gros problème:j'ai un tableau ou je veux afficher le nom des voitures:for ($j=0;$j{ switch ($j) { case 0 : echo"".$voiture."" Problème : passage de 2 formulaire à des fonction différente dans 1 même page [ par tomsawyerbelgique ] Voici mon problème:la ligne en gras est un bouton qui devrait entrer dans la fonction "calculer". Mais il n'y entre pas !! Pour voir si il y entrait, problème de liens [ par nnc95 ] nnc95SALUT ALL LE MONDEJ'ai un petit souci avec mon code php.Je me suis crée une page d'entrer avec login et mot de passe Problème de requête : UPDATE [ par loupopeye ] Salut,Big problème, ça ne marche pas..Help... require ('../connexion.php');$result = mysql_query('UPDATE logements SET valid='.$valid.', ref='".$ref. problème d'affichage de echo [ par ekipage2 ] Bonsoir,Je crois qu'il est possible q'un message d'erreur s'affiche sur la page même d'un formulaire par exempleSi j'utilise cette syntaxe => le messa problème syntaxe [ par troupe_a_jule ] juleJe epnse que je doit avoir un petit problème de syntaxe.Je veut afficher un image selon mon choix dans une liste déroulante (qui fait appel à base Problème pour diviser une variable qui vient d'une combo en 2 [ par ndsaerith ] Bonjour otut le monde! Voila j'ai un petit pb. J'affiche des noms dans une combo box : echo ''; while($data=mysql_fetch_array($req))     {     echo Problème de passage de variables [ par S2R ] Bonjour,Je voudrait pouvoir uploader des fichiers à partir d'un script php, j'ai donc un , la form dans laquelle l'input se trouve envoie sur add.php. URGENT!! problème lors d'un effacement d'un enregistrement [ par gssk ] Salut à tous, j'ai un petit problème. Je récupere des valeurs d'une table, et j'ai une liste sous cette forme:  echo '   <FORM name=retour action=supp récupération de variable [ par titeuf974 ] bonjour!! Voila. J'ai un petit problème pour récupérer des variables de form générer dynamiquement par ce code : $nbre=$_POST['nb_eleve'];//vien d'u


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales