JeuWeb - Crée ton jeu par navigateur
RegExp et comentaire documentant - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : RegExp et comentaire documentant (/showthread.php?tid=3062)

Pages : 1 2


RegExp et comentaire documentant - christouphe - 01-12-2010

Je suis en train de me faire un petit script qui fait les statistique de mon projet (nombre de ligne, nombre de commentaire, commentaire docummentant, etc)

J'ai réussi à catcher:
  • L'ouverture d'un commentaire documentant: /** avec cette expression:

    preg_match('/^\s\/\*\*\s$/', $buffer)
  • La fermeture de ces derniers */ avec l'expression:

    preg_match('/^\s\*\/$/', $buffer)

Par contre je n'arrive pas à "chopper" le commentaire en lui-même:
" * Constructeur de la classe"
avec cette chaine:

preg_match('/\*\s\b/', $buffer)

je l'ai mais aussi les requêtes avec:
$req = "SELECT * FROM carte WHERE x >= ".$xMin." AND x < ".$xMax." AND y >= ".$yMin." AND y < ".$yMax;
ou
return String(character.charAt(Math.floor(rgb / 16))) + String(character.charAt(rgb - (Math.floor(rgb / 16) * 16)));

...
Sachant qu'un commentaire documentant est composé d'un ou plusieurs espaces, une astérisque, du texte.

Une idée ?


RE: RegExp et comentaire documentant - Plume - 01-12-2010

Tu devrais catcher avec une expression du genre : /^\/\*\*(.)\*\//


RE: RegExp et comentaire documentant - christouphe - 01-12-2010

nop désolé, j'ai rien d'affiché dans mon debug...Alors qu'avec la mienne j'ai bien les commentaire ET les requêtes (par exemple) donc je pense qu'il faut raffiner mais je suis pas un expert non plus.

Exemple de bloc que je veux attraper:

/** => ok j'y arrive
* toto est beau => pas ok, enfin pas tout seul
* => pas ok, enfin pas tout seul
* @param => pas ok, enfin pas tout seul
* @retrun => pas ok, enfin pas tout seul
*/ => ok j'y arrive



RE: RegExp et comentaire documentant - Plume - 01-12-2010

Nan mais je me doute qu'elle est inexacte, c'est juste pour l'idée. Le principe c'est de catcher ce qu'il y a entre /** et */ et ensuite, tu peux travailler sur ce que tu récupères.

Si tu trouves pas la bonne expression pour faire ça, j'chercherai.


RE: RegExp et comentaire documentant - christouphe - 01-12-2010

qu'est ce que tu entends par "atcher ce qu'il y a entre /** et */ ", car je lis mon fichier ligne par ligne avec

$buffer = fgets($handle, 4096)



RE: RegExp et comentaire documentant - Jeckel - 01-12-2010

Tu devrais regarder des outils comme PHP CodeSniffer qui permettent d'analyser le code PHP (et la qualité), il doit te permettre aussi de remonter des indicateurs sur les commentaires normalement..

http://pear.php.net/manual/fr/package.php.php-codesniffer.php


RE: RegExp et comentaire documentant - christouphe - 01-12-2010

merci... Wink je vais y faire un tour.


RE: RegExp et comentaire documentant - srm - 02-12-2010

Si tu pouvais donner exactement la logique de ce que tu voulais capturer, car pour moi ça n'est pas très clair ce que tu veux capturer.

Donne plusieurs exemples de blocs de commentaire et exactement ce que tu veux capturer à l'intérieur de ceux-ci.


RE: RegExp et comentaire documentant - christouphe - 02-12-2010

je vais essayer, j'éditerai le post

En gros un commentaire comme celui-là:


/**
* Création d'une unité dans la table unités.
* @param database $oConnexion
* @param array $datas
* @return <type> $callingObject
*/

Mais de façon générale:


/**
* <du texte>
* <du texte>
* <du texte>
* <du texte>
*/

Et encore plus général je veux réussir à catcher:


* <du texte>

Car l'ouverture et la fermeture du commentaire j'y arrive.

Sachant que je lis mon fichier ligne à ligne, mais je ne suis pas rigide sur cela.


RE: RegExp et comentaire documentant - srm - 02-12-2010

Tu le fais en deux passes :

$s = '
/**
* Création d\'une unité dans la table unités.
* @param database $oConnexion
* @param array $datas
* @return <type> $callingObject
*/';

preg_match("/\\/\*+(.+?)\s+\*\\//s", $s, $match);
echo preg_replace('/^\s+\*\s+/m', '', $match[1]);


La première regex capture tout avec les * devant le texte, la deuxième sert à éliminer les * devant le texte.