2017-02-20 14 views
0

Я внес некоторые изменения в код Perl, и я не могу понять, почему ниже регулярное выражение не соответствует строке ввода.Почему в perl это регулярное выражение не соответствует строке

my $regex='^(780200703303)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+([1-9]\\d*)\\s+([1-9]\\d*)\\s+$'; 
my $line='780200703303 2   0   3   0   0   0   0   0   0   1 '; 
if ($line =~ m/$regex/) 
{ 
    print "Matched"; 
} 

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

+1

Нет необходимости скрывать обратную косую черту внутри одинарных кавычек, если вам не требуется более одного последовательного обратного слэша или если обратная косая черта не является последним символом в строке. – Borodin

ответ

6

Поскольку 0 не соответствует [1-9]\d*.


Рассматривали ли вы с помощью следующих действий:

my @fields = split ' ', $line; 
if ($fields[0] == 780200703303) { 
    ... 
} 
3

Ваш тест строка не соответствует регулярному выражению.

my $regex='\\s+([1-9]\\d*)\\s+([1-9]\\d*)\\s+$'; 
my $line='   0   1 '; 

0 не соответствует ([1-9]\d*)


сделать вас REGEX проще с помощью qr operator.

my $regex= qr/\s+([1-9]\d*)\s+([1-9]\d*)\s+$/; 

 Смежные вопросы

  • Нет связанных вопросов^_^