Добавление одного к сопоставленному номеру в регулярном выражении подстановки - PullRequest
2 голосов
/ 20 июня 2011

У меня есть файл, полный кода C ++, который представляет собой набор небольших функций, которые возвращают число.Я пытаюсь заменить каждое число на число плюс один , если число больше 2. Итак,

int blah() { return 5; }

станет

int blah() { return 6; }

, но

int blah() { return 1; }

останется прежним.

Как это сделать?

Ответы [ 3 ]

5 голосов
/ 20 июня 2011

Немного некрасиво, но должно работать:

s/\{\s*return\s+(\d+)\s*;\s*\}/$1 > 2 ? "{ return " . ($1 + 1) . "; }" : $&/ge;
0 голосов
/ 20 июня 2011
perl -e 'use Tie::File;tie @array,'Tie::File',$ARGV[0] || die;s|(return\s+)(\d+)(.*)|$2>1?$1.($2+1).$3:$1.$2.$3|e for (@array);untie @array;' FILENAME
0 голосов
/ 20 июня 2011

Проверьте номер с помощью [3-9].Пример:
/int\s*blah\(\)\s*\{\s*return\s*([3-9]);\s*}/g

РЕДАКТИРОВАТЬ:

Чтобы увеличить значение в $1, вам понадобится флаг e и конкататация строки:

$_ = 'int blah() { return 5; }';
s/int\s*blah\(\)\s*\{\s*return\s*([3-9]);\s*}/'int blah() { return '.$1+1 . '; }'/eg;
print;
...