Bonjour à tous,

Je suis un peu débutant dans les expressions rationnelles et je galère pas mal.

Je vous explique le contexte, je suis en train de réaliser un outil de coloration syntaxique pour un langage et je bloque sur quelques expressions.

Par exemple j'ai ceci (je donne l'exemple pour un seul mot clé, dans la réalité c'est un tableau):


Code : Sélectionner tout - Visualiser dans une fenêtre à part
$CODE =~ s/(\W|^)($keyword)(\W|$)/$1<kw>$2<\/kw>$3/g
Et ensuite je fais (pour les commentaires):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$CODE =~ s/(([^:]|^)\/\/.*/<comment>$1<\/comment>/g

Prise séparemment, ces deux expression régulière fonctionne comme je veux.

Malheuresement, si un mot-clé se trouve dans un commentaire, il se retrouve quand meme avec avec le <kw> et </kw>

Ce que je voudrais c'est modifier donc ma première expression pour que le kw ne soit pas mis dans les cas suivant :
- si le mot est précédé sur la meme ligne par //
- si le mot est entre /* et */
- le le mot est entre ""
- si le mot est entre ''

Edit : pour etre plus précis, le nombre de " et ' doit etre positif pour prendre en compte la chaine

Par exemple :

Ici le mot fonction doit bien etre traité :
'ceci est une chaine';
function;
'ceci est une chaine';
Par contre là non :
'ceci est une chaine; function; ceci est une chaine';
Le plus simple à mon avis est de compter le nombre de ' avant la chaine mais je ne sais pas si c'est possible.




Mais je sais pas faire, ca dépasse mes compétences !

Merci d'avanceà celui ou celle qui pourra m'aider !

: