Problème de Regex

Résolu/Fermé
Utilisateur anonyme - Modifié par 00lina00 le 29/04/2014 à 00:05
 Utilisateur anonyme - 11 mai 2013 à 19:41
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

Utilisateur anonyme
11 mai 2013 à 19:41
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
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
10 mai 2013 à 10:23
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
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 13
10 mai 2013 à 13:58
Rajoute le modifier u
=> /\/\*DESC(?:\s)*(.*)(?:\s)*\*\//su

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