0 votes

Faire correspondre les commentaires contenant un mot spécifique

Je veux faire correspondre des commentaires multilignes qui contiennent un mot spécifique, disons findthis . Le premier modèle qui me vient à l'esprit est \/\*.*?findthis.*?\*\/ (en utilisant DOTALL ). Le problème avec ce modèle est cependant qu'une chaîne comme celle-ci :

/* this is a comment */
this is some text
/* this is a findthis comment */

correspondra à l'ensemble du texte. En gros, sur un fichier plus volumineux, la première correspondance contiendrait tout, du premier commentaire au premier commentaire contenant findthis . Comment puis-je éviter cela ?

2voto

Jason Orendorff Points 15869

Eh bien, vous pourriez changer le regex en quelque chose comme \/\*([^*]|\*+[^/*])*findthis([^*]|\*+[^/*])*\*+\/ mais ...

Pour y parvenir, il faudrait que le code source soit entièrement tokenisé. Sinon, votre regex sera trompé par le contenu de type commentaire à l'intérieur des chaînes de caractères (parmi d'autres cas de figure bizarres).

(Explication de la regex folle : ([^*]|\*+[^/*]) correspond à un petit bout de l'intérieur d'un commentaire, mais ne correspond jamais à tout ou partie de */ .)

0voto

VDVLeon Points 797

Je pense que ça devrait faire l'affaire :

/\/\*.*?findthis.*?\*\// . Le ? dans le .*? partie signifie peu gourmand. De cette façon, le commentaire peut contenir les caractères * et /, mais pas */ (la fin du commentaire).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X