reguljära uttryck i Perl för nybörjare - Del 6 Inledning Detta är den sjätte delen av min serie, Regular Expressions i Perl för nybörjare. Många av de exempel vi har stött på är enkla exempel. I det här avsnittet tittar vi på två exempel som är mer krävande. Innan vi lämnar den här delen av serien, vi talar om vad som kallas backtracking, och sedan ser vi återigen på x modifierings.
Steg som krävs för att bygga en Regex Dessa är de åtgärder som krävs för att bygga ett reguljärt uttryck: * Ange uppgiften i detalj * Bryt ner problemet i mindre delar, * Översätt små delar i regexes, * Kombinera regexes, * Optimera den slutliga kombinerade regexes. Två Exempel Exempel 1 Hexadecimal Färgkod Kontrollera Ange uppgift i detalj Ett exempel på en hexadecimal färgkod är # 4C8. Ett annat exempel är # 44CC88. * Det börjar med en hash, följt av antingen 3 hexadecimala tal eller 6 hexadecimala tal. * Hexadecimala siffror är: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, och F.
* De hexadecimala bokstäver kan vara i lägre eller versaler. Att bryta ner problemet i mindre delar * Det börjar med en #. * Det följs av 3 hexadecimala tal eller * 6 hexadecimala tal * Det finns inget tecken efter 3 eller 6 hexadecimala siffror. Översätta in regexes Det finns tre små delar ovan. Den första delen ger regex: /^ # /Den andra delen ger regex: /[0-9a-fa-F] {3} /Den tredje delen ger regex: /[0-9a-fa-F] { 6} /Den sista delen ger regex /$ /Kombinera regexes Detta är den kombinerade regex: /^ # ([0-9a-fa-F] {3} $) | ([0-9a-fa-F] {6} $) /noterar den alternativa metatecken, | för de tre eller sex hexadecimala siffror.
Observera också parentesen som skiljer de alternativa grupper. Optimera Kombinerade Regex Detta innebär att förkorta den kombinerade regex. Lägg märke till att 0-9 förkortas \\ d. Så i den kombinerade regex, ändrar vi de två förekomster av 0-9 \\ d. Det finns faktiskt två grupper; vi minska dessa till en grupp genom att ta bort de inre konsolerna. Den optimerade regex är: /^ # ([\\ da-fa-F] {3} $ | [\\ da-fa-F] {6} $) /Detta uttryck är kortare än ovan av fyra tecken.
Följande kod visar användning av regex: använd strikt; (min $ matchedString) = ("# 44CC88" = ~ /^ # ([\\ da-fa-F] {3} $ | [\\ da-fa-F] {6} $) /); print $ matchedString; Utgången är: 44CC88 Exempel 2 Användarnamn Kontrollera Ange uppgift i detalj Antag att vi har en webbplats där användare måste logga in. Vi kan tala om för användaren att hans namn ska innehålla bokstäverna i lägre eller versaler och /eller sif