Stap 5: Een (zeer) korte les over reguliere expressies
Om te grijpen onze hash-gegevens uit het XML-bestand, en ook opslaan een beetje tijd zoeken, we gaan te willen een beroep doen op de hulp van een aantal Perl's meer krachtige functies: de reguliere expressie. Zal ik een kort les over reguliere expressies, maar voor degenen onder u die wilt dat meer gedetailleerde uitleg, er zijn veel goede reguliere expressie tutorials online. Check out http://perldoc.perl.org/perlretut.html voor een goede reguliere expressie tutorial.Kortom, voorzien reguliere expressies ons van een set van hulpmiddelen voor gaan door strijkers, ter vervanging van een tekenreeks door een andere tekenreeks, of delen van een tekenreeks voor later gebruik opslaan. Reguliere expressies zorgen voor 2 functies, de matching (m / /) en vervanging (s / /) exploitanten, die zullen worden gebruikt voor dit project. Als u wilt gebruiken een van deze functies in het kader van een toewijzing, zullen we gebruik maken van Perl's bindende exploitant (= ~), die wordt gebruikt voor het binden van een patroon aan een tekenreeksvariabele van keuze.
Voorbeelden:
$comment =~ /Purduecer/; #returns true if $comment string contains phrase "Purduecer"s/[a-z]/[A-Z]/; #take all lowercase letters in string and capitalize them in $_ string
Een tweede nuttige eigenschap van reguliere expressies is geheugen variabelen. In reguliere expressies, kunt u bepaalde items in haakjes plaatsen en vervolgens gebruik het speciale patroon overeenkomen met geheugen variabelen $1, $2, etc. tot de gedeelten van de tekenreeksen die overeenkomen met deze onderdelen later.
Voorbeelden:
/(Instructables) Robot/; #Match any line with the phrase "Instructables Robot"$website = $1; #Save result of successful pattern match contained in first set of parens #(in this case, variable $1 contains "Instructables")
Tot slot, in reguliere expressies zijn er bepaalde tekens die een speciaal doel dienen. Dit zijn de backslash escapes (die allemaal ziet er vertrouwd voor C-programmeurs), karakter klassen en metatekens. Bijvoorbeeld, zodat deze overeenkomen met elk één letter met een tabblad aan weerszijden, kunnen we zeggen:
/\t[a-zA-Z]\t/
Deze vierkante haken worden gebruikt in reguliere expressies definiëren een tekenklasse. Stel echter dat we wilden vinden tekst tussen vierkante haken in de lijn. Wij kunnen niet gewoon schrijven zoals is, zoals hieronder is afgebeeld:
/[[a-zA-Z]+]/; #WRONG, outer square brackets interpreted as a character class, do not do this
Dus, als u wilt verwijderen van de bijzondere kwaliteiten van het paar van vierkante haken, voeg een backslash vooraf, waarbij wordt verwijderd van de bijzondere kwaliteiten van een anders voorbehouden karakter binnen een reguliere expressie.
/\[[a-zA-Z]+\]/; #Correct, now matches any number of letters enclosed within a pair of square #brackets