/ / Existuje nejaký spôsob, ako zladiť n'th znak? [duplikát] - regex, perl

Existuje nejaký možný spôsob, ako splniť n'th charakter? [duplikát] - regex, perl

Moje vstupné údaje sú uvedené nižšie. Chcem zoskupiť slovo medzi 6. \ Ta 7. \ T -.

my $sa = "a1a1a1-b1b1b1-c-ddd-eee-fff-gggggg-hHhH-iiii-j-KKKKK";

Na to bol skutočný regex

/[^-]+-[^-]+-[^-]+-[^-]+-[^-]+-([^-]+)-/

Na vybudovanie regexu som sa snažil, ako je uvedené nižšie,

my $avc = "[^-]+-" x 5 . "([^-]+)-";

my $ar = qr"$avc";

$sa =~m/$ar/g;

print $1;

Moja pochybnosť, existujú nejaké možnosti sú k dispozícii v rámci regex. Bez použitia x, Ako to môžem urobiť v jednom regexe?

odpovede:

7 pre odpoveď č. 1

použitie limitujúci kvantifikátor opakovania

/(?:[^-]+-){5}([^-]+)-/

Zobrazenie pravidelného výrazu

Regex vysvetlenie tu.


Zachytávacia skupina sa môže nachádzať v rámci opakujúcej sa skupiny.

/(?:([^-]+)-){6}/

Zobrazenie pravidelného výrazu

Regex vysvetlenie tu.