Problème de Regex

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
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. Utilisateur anonyme
     
    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
  2. Gigatrappeur Messages postés 230 Statut Membre 25
     
    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
  3. Azraka Messages postés 265 Statut Membre 13
     
    Rajoute le modifier u
    => /\/\*DESC(?:\s)*(.*)(?:\s)*\*\//su

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