Вы используете двойные кавычки, когда определяете свое регулярное выражение.Это означает, что \s
будет интерполироваться как escape-последовательность, и это нарушит ваш шаблон.
Вместо этого используйте qr//
.
my $regexp = qr/.*([A-Z][a-z]*\s*[0-9]*\.[0-9]*%\s*\([0-9]*\/[0-9]*\)).*/;
Если вы имелиuse warnings
, вы получите это предупреждение.
Нераспознанные escape-данные пройдут через
Если вы напечатаете скомпилированное регулярное выражение с
my $regexp = ".*([A-Z][a-z]*\s*[0-9]*\.[0-9]*%\s*\([0-9]*\/[0-9]*\)).*";
print qr/$regexp/;
вы увидите этот вывод.
# no backslash here
# V
(?^:.*([A-Z][a-z]*s*[0-9]*.[0-9]*%s*([0-9]*/[0-9]*)).*)
Когда обратный слеш пропущен, механизм регулярных выражений не знает, что вы говорите о пробелах, а вместо этого видит буквальный s
.