* Vi måste begränsa det tillgängliga strängen till 3 eller 6 tecken. Översätta in regexes Den regex för den första delen är: /^ [a-zA-Z] {3,18} $ /Den regex för den andra delen är: /^ [0-9] {3,18} $ /The regex för den tredje delen är: /^ [_] {3,18} $ /Kombinera regexes I bryta ner avsnittet är ovanstående tre delar i kombination med frasen "och /eller" Det finns inget direkt sätt att göra detta, så vi måste sluta det. Detta är den kombinerade regex: /^ [a-zA-Z0-9 _] {3,18} $ /Optimera Kombinerade Regex Detta innebär att förkorta den kombinerade regex.
Lägg märke till att klassen [a-zA-Z0-9_] förkortas \\ w. Den optimerade regex är: /^ [\\ w] {3,18} $ /Backtracking Vi har sett hur man matcha alternativ med hjälp av växlingen metatecken, |. När matchande alternativ, använder Perl en process som kallas backtracking. Jag kommer att illustrera detta med ett exempel. Tänk på följande uttryck: "12345" = ~ /(124 | 123) (46 | 4 | 45) /Jag kommer att förklara backa genom att förklara driften av ovanstående uttryck. Följande steg förklarar hur PHP löser ovanstående uttryck. A. Det börjar med det första numret i den tillgängliga strängen "1". B.
Det försöker det första alternativet i den första gruppen "124". C. Den ser matchningen av "1" följt av "2". Det är okej. D. Det märker att "4" i regex matchar inte "3" i den tillgängliga strängen - som är en återvändsgränd. Så det backtracks två tecken i snöre och plockar det andra alternativet i den första gruppen "123". E. Den matchar "1" följt av "2" följt av "3". Den första gruppen är uppfyllt. F. Det går vidare till den andra gruppen och plockar det första alternativet '46'. G. Det matchar "4" i det tillgängliga strängen. H.
Men "6" i det reguljära uttrycket matchar inte "5" i den tillgängliga strängen, så det är en återvändsgränd. Det backtracks ett tecken i det tillgängliga strängen och plockar det andra alternativet i den andra gruppen "4". I. "4" matcher. Den andra