/ / Perl - Zwraca ostatni znak alfabetu po ostatniej cyfrze w ciągu i zwraca również zmodyfikowany ciąg - regex, perl

Perl - Zwraca ostatni znak alfabetu po ostatniej cyfrze w ciągu znaków i zwraca również zmodyfikowany ciąg znaków - regex, perl

Mam ciąg jak poniżej:

$var = "123456d";

lub ewentualnie

$var = "123456"; # (no alpha char)

Będzie to mieć maksymalnie 6 cyfr, nie mniej niż 5, jeśli to ma znaczenie. Bez cyfr, spacji i znaków specjalnych w liczbach.

W moim skrypcie Perl muszę usunąć i zwrócić ostatni znak alfa ORAZ ciąg bez znaku alfa.

Przypuszczam, że można użyć D i przycinania? czy siekać? ale musi istnieć łatwy sposób, aby szybko zdobyć obie zmienne.

my $numbers =~   s/D+?$var//;  #???

my $alpha = substr($var, 0, -1); ## but no alpha check.

lub

my $alpha = chop($var); ## but no alpha check.

to jeśli a-Z i tak dalej, aby sprawdzić, czy jest to znak alfa.

Lub limit mojego rozwiązania umiejętności:

$alpha = $var;
$alpha =~ s/[0-9]//ig;
$var =~ s/[a-Z]//ig;
$numbers = $var;

więc wynik:

($numbers == "123456")
($alpha eq "d") (or "" if nothing)

Wydaje mi się, że jest to zbyt trywialne, aby o to zapytać, ale po prostu nie mogę znaleźć ani napisać odpowiedniego rozwiązania.

Moje użycie = ~ s to tylko przypuszczenie, ale musi istnieć lepszy sposób lub nawet jedna linijka.

Dzięki za wszelką pomoc tutaj ...

SORRY po myśli! Po cyfrach mogą występować 2 znaki alfanumeryczne! Powinny być zwrócone razem jako pojedynczy var ($ alpha eq „dd”)

Znalazłem to też do0:

$var =~ s{^([0-9]+).*}{$1}i;

Odpowiedzi:

6 dla odpowiedzi № 1

Za pomocą pL pozwoli uniknąć przechwytywania liczb, a włączenie opcjonalnego ciągu zapewni, że dopasowanie nastąpi nawet dla liczb bez zakończonych liter.

my $var = "123456d";
my ($num, $letter) = $var =~ /^(d+)(pL)?$/;

Pamiętaj, że nie możesz użyć w aby uchwycić możliwą literę końcową, ponieważ zawiera ona także cyfry. Jak zauważył tchrist, p{alpha} można również użyć.


0 dla odpowiedzi nr 2

Może coś takiego:

my $numbers =~ s/(d+)(p{alpha}+)?/$1/;

my $alpha = $2;

The $1 odnosi się do pierwszego przechwytywania w nawiasach, $2 odnosi się do drugiego.

Edytowane: używane d dla cyfry, p{alpha} dla alfa.