Regular Expressions i Perl for nybegyndere - Del 6 Indledning Dette er den sjette del af min serie, Regular Expressions i Perl for nybegyndere. Mange af de eksempler, vi er stødt på er simple eksempler. I dette afsnit ser vi på to eksempler, der er mere krævende. Inden vi forlader denne del af serien, vi taler om, hvad der kaldes Backtracking, og derefter se vi igen på x modifier.
Trin, der kræves for at opbygge en Regex Det er de trin, der kræves for at opbygge en regex: * Angiv opgaven i detaljer, * Nedbryde problemet i mindre dele, * Translate de små dele i regexes, * Kombiner regexes, * Optimer det endelige kombinerede regexes. To Eksempler Eksempel 1 Hexadecimal Farvekode Kontrollér Angivelse af Task i Detalje Et eksempel på en hexadecimal farvekode er # 4C8. Et andet eksempel er # 44CC88. * Det begynder med en hash, efterfulgt af enten 3 hexadecimale tal eller 6 hexadecimale tal. * Hexadecimale cifre er: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E og F.
* De hexadecimale bogstaver kan være i små eller store bogstaver. Nedbryde problem i mindre dele * Det begynder med en #. * Det er efterfulgt af 3 hexadecimale tal eller * 6 hexadecimale tal * Der er ingen tegn efter 3 eller 6 hexadecimale cifre. Oversætte ind regexes Der er tre små dele ovenfor. Den første del giver regex: /^ # /Anden del giver regex: /[0-9a-FA-F] {3} /Den tredje del giver regex: /[0-9a-FA-F] { 6} /Den sidste del giver regex /$ /kombinere regexes Dette er den kombinerede regex: /^ # ([0-9a-FA-F] {3} $) | ([0-9a-FA-F] {6} $) /Bemærk den alternative metategn, | for de tre eller seks hexadecimale cifre.
Bemærk også parenteserne, der adskiller de alternative grupper. Optimering af kombinerede Regex Dette betyder at afkorte den kombinerede regex. Bemærk, at 0-9 er forkortet til \\ d. Så i den kombinerede regex, ændrer vi de to forekomster af 0-9 til \\ d. Der er faktisk to grupper; vi reducere disse til en gruppe ved at fjerne de indre parentes. Den optimerede regex er: /^ # ([\\ da-fA-F] {3} $ | [\\ da-fA-F] {6} $) /Dette udtryk er kortere end den oven af fire tegn.
Følgende kode illustrerer brug af regex: brug streng; (min $ matchedString) = ("# 44CC88" = ~ /^ # ([\\ da-FA-F] {3} $ | [\\ da-FA-F] {6} $) /); print $ matchedString; Udgangen er: 44CC88 Eksempel 2 Brugernavn Kontrollér Angivelse af Task i Detail Antag, at vi har et sted, hvor brugerne har til at logge ind. Vi kan fortælle brugeren, at hans navn skal indeholde bogstaver i lavere eller store bogstaver og /eller tal fr