2010-07-19 7 views
6

tengo una cadena con el siguiente formato:incrementar un número entero al final de una cadena en Perl

\main\stream\foo.h\3 

que pueden tener más o menos "secciones", pero siempre va a finalizar con una barra seguida de una entero. Otros ejemplos incluyen:

\main\stream2309\stream222\foo.c\45 

\main\foo.c\9 

necesito, en Perl, incremente el número al final de la cadena y dejar el resto solo. Encontré un ejemplo en este sitio que hace exactamente lo que quiero hacer (ver Increment a number in a string in with regex), solo que el idioma es Javascript. La solución dada fue:

.replace(/\d+$/,function(n) { return ++n }) 

Tengo que hacer lo mismo en Perl.

Respuesta

10

Puede usar el modificador de expresiones regulares /e para poner el código ejecutable en su cadena de reemplazo.

Algo así como:

$string =~ s/(\d+)$/$1 + 1/e; 

debería funcionar.

+1

trabajado como un encanto! Gracias. – user396162

+1

El autoincremento demasiado malo está limitado a cadenas que coincidan con '/^[a-zA-Z] * [0-9] * \ z /' –

3

Probar $var =~ s/(\d+$)/($1 + 1)/e

Cuestiones relacionadas