Автоинкрементные замены Regex - PullRequest
2 голосов
/ 07 июня 2011

есть ли строка в регулярных выражениях, которая может указывать автоинкременту его замены, будь то цифры или буквы.

Спасибо

например, у меня есть строки, которые должны быть числом 1, 2, 3, 4, 5, но в настоящее время они пронумерованы как 1, 1, 1, 1, 1

как бы заменить число в этих 5 отдельных похожих строках на 1, 2, 3, 4, 5

1 Ответ

4 голосов
/ 07 июня 2011

Я не знаком с синтаксисом TextWrangler; однако он использует pcre, так что это должно быть тем, что вы хотите, если у вас есть способ присвоить начальное значение вашей инкрементной переменной (в данном случае я использую $ii) ... сценарий ниже заменяет любое вхождение "пицца-х" с "пицца-0", "пицца-1" ...

@foo = ('pizza', 'pizza-a', 'pizza-b', 'pizza-c');
$ii = 0;
foreach (@foo) {
    $_ =~ s/(pizza-)[a-z]/"$1".$ii++/e;
    print "$_\n";
}

Результаты ...

[mpenning@mpenning-t60 Desktop]$ perl foo.pl 
pizza
pizza-0
pizza-1
pizza-2

Магия происходит от s///e; и $ii++; убедитесь, что вы заключили не увеличивающуюся строку в кавычки и объединили ее с точкой.

В качестве альтернативы, просто выполните манипулирование с автоинкрементом с помощью perl -pi -e '$ii = 0; s/something/"here".$ii++/e `непосредственно в текстовом файле (сначала сделайте резервную копию, конечно).

...