Moje dane wejściowe jak poniżej. Chcę pogrupować słowo między szóstą a siódmą pozycją -
.
my $sa = "a1a1a1-b1b1b1-c-ddd-eee-fff-gggggg-hHhH-iiii-j-KKKKK";
W tym celu prawdziwym wyrażeniem regularnym było
/[^-]+-[^-]+-[^-]+-[^-]+-[^-]+-([^-]+)-/
Aby zbudować regex, próbowałem jak poniżej,
my $avc = "[^-]+-" x 5 . "([^-]+)-";
my $ar = qr"$avc";
$sa =~m/$ar/g;
print $1;
Moje wątpliwości, czy są jakieś opcje dostępne w ramach regex. Bez używania x
. Jak mogę to zrobić w pojedynczym wyrażeniu regularnym?
Odpowiedzi:
7 dla odpowiedzi № 1Posługiwać się ograniczający kwantyfikator powtórzeń
/(?:[^-]+-){5}([^-]+)-/
Grupa przechwytująca może znajdować się w grupie powtarzalnej, tylko ta ostatnia zostanie przechwycona.
/(?:([^-]+)-){6}/