2010-07-19 10 views
6

Ho una stringa nel seguente formato:Incremento un numero intero alla fine di una stringa in Perl

\main\stream\foo.h\3 

esso può avere più o meno "sezioni", ma sarà sempre terminare con una barra seguita da un numero intero. Altri esempi includono:

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

\main\foo.c\9 

ho bisogno di, in Perl, incrementare il numero alla fine della stringa e lasciare il resto da solo. Ho trovato un esempio su questo sito che fa esattamente quello che voglio fare (vedi Increment a number in a string in with regex) solo la lingua è Javascript. La soluzione data era:

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

ho bisogno di fare la stessa cosa in Perl.

risposta

10

È possibile utilizzare il modificatore di espressioni regolari /e per inserire il codice eseguibile nella stringa di sostituzione.

Qualcosa di simile:

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

dovrebbe funzionare.

+1

ha funzionato come un fascino! Grazie. – user396162

+1

L'incremento automatico troppo limitato è limitato alle stringhe che corrispondono a '/^[a-zA-Z] * [0-9] * \ z /' –

3

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

Problemi correlati