Perl: основной синтаксический анализ регулярных выражений для слова @ word - PullRequest
0 голосов
/ 02 ноября 2018

Я получаю данные для моего скрипта (из другого скрипта) в этом формате хуг @ ABC

У меня есть это условие соответствия в моем скрипте

 if ($test =~ /.* by (\w+)\@(\w).*/) { print $1; }

У этого нет совпадения по какой-то причине.

Я попробовал одну командную строку:

вариант 1:

perl -e 'my $aa = "abcd@abcd" ; if ($kk =~ /(\w+)\@(\w+)/) {print "\n  $1 \n $2 \n";}

вариант 2:

perl -e 'my $aa = q[abcd@abcd] ; if ($kk =~ /(\w+)@(\w+)/) {print "\n  $1 \n $2 \n";}

печатается вариант 2, но не вариант 1. Может ли кто-нибудь объяснить причину.

1 Ответ

0 голосов
/ 02 ноября 2018

В командной строке есть две проблемы:

Вы присваиваете переменную $ aa, но выполняете сопоставление с образцом для переменной $ kk.

Вторым является то, что @abcd интерпретируется как переменная в строке, разделенной символом "...". Переменная @abcd не определена, поэтому она интерполируется в пустую строку, и в результате вы получаете $ aa = "abcd".

Вы можете увидеть проблему с @ при вводе этого:

perl -e 'my $aa = "abcd@abcd"; print "$aa\n"'

Вы должны замаскировать @. Поэтому попробуйте это вместо:

perl -e 'my $aa = "abcd\@abcd"; if ($aa =~ /(\w+)@(\w+)/ ) {print "\n $1 \n $2 \n";}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...