регулярное выражение подстановки, с захватом - PullRequest
1 голос
/ 25 августа 2010

может быть, это глупый вопрос, но:я запускаю Perl 5.8.8, и мне нужно заменить любое подчеркивание, которому предшествует число, на «0».

running:

 $var =~s /(\d)_/$10/g; 
, очевидно, не работает, так как $ 10 интерпретируется как ... ну ...$ 10, а не «$ 1 с последующим 0»

, более того, поскольку я выполняю perl5.8, я не могу сделать

$var=~s/(?<n1>\d)\_/$+{n1}0/g;

какая-либо идея?заранее спасибо

Ответы [ 4 ]

11 голосов
/ 25 августа 2010

Так же, как и в различных оболочках Unix, вы можете заключить имя переменной в фигурные скобки для устранения неоднозначности.

$var =~s /(\d)_/${1}0/g;

Или вы можете использовать упущение, чтобы цифра не была частью совпадения:

$var =~s /(?<=\d)_/0/g; 
2 голосов
/ 25 августа 2010

Это также было бы хорошим местом для обратного утверждения нулевой ширины:

$var =~ s/(?<=\d)_/0/g;

Он ищет цифру, фактически не добавляя цифру в согласованный текст.

0 голосов
/ 25 августа 2010

Другие возможности (не уверен, если применимо к Perl 5.8.8)

s/\d\K_/0/
s/(?<=\d)_/0/
0 голосов
/ 25 августа 2010

$var =~s/(\d)_/${1}0/g;

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