Problème de Regex

Résolu
Bonjour/Bonsoir à tous,
je suis venu vous poser une question très importante, dans le cadre d'un script de test assez complexe des composants d'une application, j'aurais voulu automatiser celui-ci, car, pour pouvoir exécuter les test, j'ai, avant chaque fonctions, un code comme celui-ci :

/*DESC
@param nom type

*/
function laFonction()

J'ai un parse fonctionnel pour l'étape où je récupère les @param, etc... mais ce dont j'ai vraiment besoin c'est de la récupération des /*DESC ... */ car, si il y en a deux dans un même document, cela fait tout planter, et en plus des infos de la fonction, je me tape aussi tout le code entre le tout premier /*DESC et le tout dernier */

Donc, mon problème étant qu'il faut ABSOLUMENT que je récupère la valeur contenue UNIQUEMENT entre /*DESC et */ avant chaque fonction (dont le nom, et les "attributs" [private, public, etc...] peuvent cahnger :s)

Donc, ma question étant : Est-ce qu'il y a un moyen ? Et si oui, comment ?

Voici mon REGEX actuel : /\/\*DESC(?:\s)*(.*)(?:\s)*\*\//s

Merci de votre aide,

3 réponses

  1. Bonjour, merci des deux réponses qui m'ont été proposés très gentillement, je tenais à dire que j'ai réussi à résoudre mon problème autrement en augmentant les performances de mon application, cette méthode est plus complexe, mais comme j'ai vite tendance à me plaindre des gens qui disent : "j'ai résolu mon problème" mais qui ne donnent pas la solution, je vais vous la donner pour ceux que ça intéresseraient :
        $tokens = token_get_all(file_get_contents("chemin/vers/votre/fichier.php"));
    	$tokList = array();
    	foreach($tokens as $tok) {
    		if ($tok[0] != T_COMMENT) { continue; }
    		if (substr($tok[1], 0, strlen("/*DESC")) === "/*DESC") {
    			$tokList[] = array('line' => $tok[2], 'text' => str_replace(array('	', '  '), array(' ', ' '), $tok[1]));
    		}
    	}


    Sur ce au revoir à tous, ce jour étant mon anniversaire, je m'en vais festoyer :D
    1
    1. Bonjour,

      Un teruc du genre, peut-être :
      <?php
      $test = "
      /*DESC
      		@param nom type
      	
      	*/
      	function laFonction()
      	
      	
      	/*DESC
      		@param nom type 2
      	
      	*/
      	function laFonction()
      	";
      preg_match_all("#/\*DESC(?:\s)*(.*)(?:\s)*\*/#", $test, $matches, PREG_SET_ORDER);
      echo '<pre>';
      print_r($matches);
      echo '</pre>';
      ?>


      Cordialement,
      Gigtrappeur
      0
      1. Rajoute le modifier u
        => /\/\*DESC(?:\s)*(.*)(?:\s)*\*\//su

        Cela permet de capturer l'expression la plus petite qui correspond à ton masque.
        0