Соответствие строки для / * и * / - PullRequest
0 голосов
/ 16 декабря 2009

У меня есть текстовый файл со строками ниже:

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

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

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

Я не знаю, как разделить строки комментариев (/* something */):

LINE1:

/* MY TXT File */

LINE2: (на самом деле я не думаю, что эта строка действительно является строкой комментариев.)

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

мой код ниже.

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

LINE1 и LINE2 будут рассматриваться как комментарий.

Я гуглил и нашел информацию ниже.

^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

но я не знаю, как объединить /* с символами ^ и $, чтобы улучшить мой код для анализа строки, начинающейся с /* и заканчивающейся */

Спасибо.

Ответы [ 3 ]

4 голосов
/ 16 декабря 2009
m{^/\*.*\*/$}

будет соответствовать строкам, которые имеют /* в качестве первых двух символов и */ в качестве последних двух символов.

2 голосов
/ 16 декабря 2009

Существует невероятный модуль CPAN, который может помочь с этим, Regexp :: Common :: comment . Использовать его невероятно просто:

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";
}

Вы можете легко расширить это, чтобы охватить многострочные комментарии.

2 голосов
/ 16 декабря 2009

См. FAQ . Вместо игнорирования текста, соответствующего заданному шаблону, захватите его.

В качестве альтернативы, вы можете дать String :: Comments :: Extract выстрел. См. [String::Comments::Extract::C->collect( <source> )] (http://search.cpan.org/perldoc/String::Comments::Extract#String::Comments::Extract::C-%3Ecollect(%3Csource%3E).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...