Regex

[Résolu]
Signaler
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
-
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
-
Bonjour,

Je souhaite réaliser en PHP un petit script qui me liste les fichiers C présent dans un répertoire et qui affiche le code présent dans ce répertoire sur ma fenetre.
Jusque la pas de probleme. Je souhaite cependant mettre dans une couleur différente les commentaires de ces codes sources.
J'ai donc dans mon css une nouvelle catégorie .comment.

Je cherche l'expression réguliere me permettant de remplacer les /* */ par /*...*/, et également les // de la même façon mais jusqu'a la fin de la ligne.

Auriez-vous une idée?
J'espere avoir été assez clair :)
Merci d'avance

Vive le C
Savon

5 réponses

Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
13
Ca y est, j'ai trouvé!!!
Non sans peine, mais ça à l'air de marcher convenablement. Ouf

Voila la solution qui semble fonctionner:
function parse_code($code)
{
    $patterns = array('#(/[*].*?[*]/)#s', '#(//.*\n)#m');
    return preg_replace($patterns, '\\1', $code);
}
Vive le C
Savon
Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
1
Bonjour,

Essaie de voir du coté de la fonction preg_replace et essaie cette expression reguliere :

preg_replace('#(/*.+*/)#', "$1", $texte);

A voir si il ne faut pas échapper les slash.

Bonne prog.
Messages postés
239
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
3 juin 2010
1
Salut,
Voici un exemple :

<?php

function parse_code($code) {
   $patterns = array('#(/[*].+[*]/)#s', '#^(//.+)#m');
   return preg_replace($patterns, '\\1', $code);
}

?>
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
13
Salut,

Merci pour vos réponses.
>>DiGhan: Impeccable pour les commentaires de type /* */ sur plusieurs lignes, mais ne reconnait pas les commentaires //
Tu aurais une idée?
>>lesdis: Ne fonctionne pas, j'avais déja essayé quelques trucs du genre!
Vive le C
Savon
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
13
En fait, petite erreur de ma part.

Voici le code actuel:
$patterns = array('#(/[*].+[*]/)#s', '#(//.*\n)#m');
return preg_replace($patterns, '\\1', $code);

Ca à l'air de plutot bien marché por les commentaires //
Par contre j'ai un probleme pour les commentaires /* */ si j'en ai plusieurs dans le morceau de code à afficher.
Si j'ai plusieurs blocs /* */ il me passe tout à partir du premier /* jusqu'au dernier */ et ne voit pas les /* et */ intermédiaire.

J'ai par exemple le code suivant en entrée
/* test */
int main (void)
{
    /*Return directly*/
    return 0;
}
J'obtiens en sortie
/* test */

int main (void)

{

    /*Return directly*/

    return 0;

}

Vive le C
Savon