Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Поиск слов начинающихся с $ исключая комментарии.


Автор: TChainik 10.10.2007, 08:15
Доброго времени суток!

Подскажите, пожалуйста, как найти в тексте все слова
начинающиеся с $ кроме слова $result и текста
в комментариях типа // $бла $бла $бла
и /* $бла $бла $бла */

сделал регексп для текста без учета комментариев, вот:

\$(?!result)\w+

Заранее, спасибо.

Автор: tishaishii 10.10.2007, 10:22
Код
$/=undef;
$str=<DATA>;
$str=~s{//[^\r\n]*|/\*.*?\*/}{push @arr, $&; +'@@'}geos;
print $&, "\n" while $str=~m{\$\w+}gcs;
$str=~s{\Q@@\E}{+shift @arr}geos;
print '-' x 10, "\n";
print $str;

__END__
$a dsfds $b //$c
/*
    $d
*/
$e

Автор: amg 10.10.2007, 10:24
Можно сначала удалить все комментарии:
Код

s%[ \t]*//.*?\n?%%g;
s%/\*([^*]|\*(?!/))*\*/[ \t]*\n?%%g;


Опоздал...

Автор: tishaishii 10.10.2007, 10:37
А можно ничего не удалять.
Код
$/=undef;
$str=<DATA>;
my($old, $new, $s);

while($str=~m{//[^\r\n]*|/\*.*?\*/}gcs) {
    $new=pos $str;
    $s=substr $str, $old, $new-$old-length $&;
    $old=$new;
    print $&, "\n" while $s=~m{\$\w+}gcs;
}
$s=substr $str, $old;
print $&, "\n" while $s=~m{\$\w+}gcs;

__END__
$a dsfds $b //$c
/*
    $d
*/
$e

Автор: TChainik 11.10.2007, 00:29
Спасибо большое всем ответившим.

А скажите пожалуйста, приведенные конструкции можно оформить одним регекспом?

Автор: shamber 11.10.2007, 13:52
TChainik, а может просто оформить вызовом функции ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)