2009-12-16 7 views
0

J'ai un fichier texte contenant les lignes ci-dessous:chaîne correspondante pour/* et */

/* MY TXT File LINE */ 
/* MY TXT File LINE MORE */ 

constant private FileName = <A "C:\\TMP\\ALARM.TXT"> 

constant ConfigAlarms = <U1 0> /* Comment Here*/ 

Je ne sais pas comment diviser les lignes de commentaires (/* something */):

LINE1:

/* MY TXT File */ 

LIGNE2: (. acturally je ne pense pas que la ligne est une ligne vraiment commentaires)

constant ConfigAlarms = <U1 0> /* Comment Here*/ 

mon code ci-dessous.

if ($val =~ /\/\*/){ 
    print "<!-- $line -->"; 
    print "\n"; 
} 

Les lignes LINE1 et LINE2 seront traitées comme des commentaires.

J'ai recherché sur Google les informations ci-dessous.

^f  # f at the beginning of a line 
^ftp # ftp at the beginning of a line 
e$  # e at the end of a line 
tle$ # tle at the end of a line 

mais je ne sais pas comment combiner /* avec le ^ et $ caractère pour améliorer mon code pour analyser la ligne commençant par /* et se terminent par */

Merci.

+1

Je dois vous demander pourquoi vous essayez d'analyser '/ *' et '* /'? Si vous analysez un script en utilisant un nouveau langage, vous devez créer un analyseur spécialisé pour ce langage. un fichier de configuration, utilisez l'un des formats bien établis tels que YAML ou JSON – Ether

+0

Je prévois t un fichier txt de grande taille au fichier XML. Il y a des lignes de commentaires/* */dans le fichier txt. Je dois analyser et ajouter le commentaire XML "" style. Il est plus facile de lire le nouveau fichier XML. –

Répondre

4
m{^/\*.*\*/$} 

correspondront lignes qui ont /* comme leurs deux premiers caractères et */ leur deux dernières.

+1

@Nano, il est important de noter que la suggestion d'Anon utilise {} au lieu de // dans l'expression régulière. Cela rend l'expression régulière plus facile à lire. – pavium

+1

Notez également que, comme la plupart des solutions regex, cela échouera si vous avez une chaîne dans votre code source qui contient '"/* comments */"'. Si c'est un problème, un analyseur est en ordre. –

+0

/* MY TXT File */- Il n'y a pas d'espace entre * et M, ça marche bien maintenant. /* MY TXT File */- Il y a un ou plusieurs espaces entre * et M, cela ne fonctionne pas. Comment le gérer? Merci. –

2

Il y a un module CPAN incroyable qui peut aider, Regexp::Common::comment utilisation est incroyablement facile.

use Regexp::Common qw /comment/; 

while (<>) { 
    /$RE{comment}{C}/  and print "Contains a C comment\n"; 
    /$RE{comment}{C++}/  and print "Contains a C++ comment\n"; 
    /$RE{comment}{PHP}/  and print "Contains a PHP comment\n"; 
    /$RE{comment}{Java}/ and print "Contains a Java comment\n"; 
    /$RE{comment}{Perl}/ and print "Contains a Perl comment\n"; 
    /$RE{comment}{awk}/  and print "Contains an awk comment\n"; 
    /$RE{comment}{HTML}/ and print "Contains an HTML comment\n"; 
} 

use Regexp::Common qw /comment RE_comment_HTML/; 

while (<>) { 
    $_ =~ RE_comment_HTML() and print "Contains an HTML comment\n"; 
} 

Vous devriez être en mesure d'étendre facilement ce pour couvrir multi

Questions connexes