Используя perl, как вы обрабатываете регулярные выражения, взятые из ввода командной строки? - PullRequest
4 голосов
/ 07 августа 2011

Я создаю сценарий для получения ввода регулярных выражений из командной строки и его обработки;примерно так:

chomp(my $regex = $ARGV[0]);
my $name = '11528734-3.jpg';

$name =~ $regex;

print $name . "\n";

Мой ввод в скрипт: "s / .jpg / _thumbnail.jpg / g", но $ name не обрабатывает ввод регулярных выражений из командной строки.

Любой совет, как сделать эту работу?

Спасибо!

1 Ответ

8 голосов
/ 07 августа 2011

Использование $name =~ $regex не изменит ваш $name.Вы должны использовать оператор s/// для внесения любых изменений.

например,

$name =~ s/$pattern/$replacement/;

Если вы указываете и шаблон и замену в одном аргументеНапример, в форме s/foo/bar/ вам придется сначала разделить их:

my (undef, $pattern, $replacement) = split '/', $regex;
$name =~ s/$pattern/$replacement/;

Оригинальный ответ:

Использовать qr//:

$name =~ qr/$regex/;

Вы также можете просто использовать $name =~ /$regex/, но версия qr является более общей, поскольку вы можете сохранить объект регулярного выражения для дальнейшего использования:

$compiled = qr/$regex/;
$name =~ $compiled;
$name =~ s/$compiled/foobar/;

и т. Д.

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