Мое регулярное выражение не соответствует - PullRequest
0 голосов
/ 10 июня 2010
$a ="SCNSC:                                            SME@companay.isa.come";
$b ="alerts:                                         nek";
$c ="daily-report:                           tasd,dfgd,fgdfg,dfgdf,sdf@dfs.com";

print "matched" if ($a =~ /\w+:\s*\w+@\w+\.\w+/ );
print "matched" if ($b =~ /\w+:\s*\w+[,\w+]{0,}/ );

 print "matched" if ($c =~ /\w+:\s*\w+[,\w+]{0,}/ );

не отображается соответствие

Ответы [ 2 ]

7 голосов
/ 10 июня 2010

Опция -W - это ваш друг:

$ perl -W sample .pl
Possible unintended interpolation of @companay in string at junk.pl line 1.
Possible unintended interpolation of @dfs in string at junk.pl line 3.
Name "main::companay" used only once: possible typo at junk.pl line 1.
Name "main::dfs" used only once: possible typo at junk.pl line 3.

Так что $a и $c не содержат литералов @companay и @dfs, они содержат пустой (неопределенный)массив интерполируется на их место.Выражение {0,} эквивалентно * (что означает ноль или более), поэтому давайте уберем это, и в Perl уже слишком много знаков препинания, поэтому давайте отбросим ненужные скобки.Это дает нам единственное совпадение, о котором Perl нас не предупреждал:

print "matched" if $b =~ /\w+:\s*\w+[,\w+]*/ ;

, что хорошо, за исключением того, что вы, вероятно, намеревались использовать круглые скобки в качестве последней части регулярного выражения вместо «ноль или более вхожденийкласс символов, содержащий , \w и +. Исправление всего этого дает:

$a ='SCNSC:    SME@companay.isa.come';
$b ='alerts:      nek';
$c ='daily-report:  tasd,dfgd,fgdfg,dfgdf,sdf@dfs.com';

print "matched\n" if $a =~ /\w+:\s*\w+@\w+\.\w+/ ;
print "matched\n" if $b =~ /\w+:\s*\w+(,\w+)*/ ;
print "matched\n" if $c =~ /\w+:\s*\w+(,\w+)*/ ;

, который соответствует всем строкам. Обратите внимание, что \w не включает в себя символ @, поэтому они совпадают, но, возможно, не совсем то, что вы хотели.

2 голосов
/ 10 июня 2010

Всегда добавляйте use strict; и use warnings; вверху ваших сценариев.

Это привлечет ваше внимание к глупым опечаткам и т.п.* и $b для имен переменных, так как они специально зарезервированы для функции sort.

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