Regex

Résolu
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 - 3 oct. 2007 à 00:29
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 - 5 oct. 2007 à 00:34
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

julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
5 oct. 2007 à 00:34
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
3
lesdis Messages postés 403 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 7 août 2020
3 oct. 2007 à 09:37
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.
0
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
3 oct. 2007 à 22:37
Salut,
Voici un exemple :

<?php

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

?>
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
5 oct. 2007 à 00:04
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
5 oct. 2007 à 00:15
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
0
Rejoignez-nous