PmanX hat geschrieben:Die Auseinandersetzung mit den regulären Ausdrücken von Perl hat ja was Positives.
Wir reden nicht von Regulären Ausdrücken sondern vom Konzept eines dynamischen Scopes.
Von den 5 Variablen [...] habe ich bisher nur
benutzt. Diese werden nach einem
erfolgreichen Matching im
aktuellen Block gesetzt und sind
dort gültig.
Ich geb zu, dass ich von Perl keine Ahnung habe, aber das selbe Konzept haben wir in Ruby auch. Dort verwende ich fast ausschließlich nur $1 - $9, sowie $~, der den letzten Match als MatchData objekt enthält:
Code: Alles auswählen
irb(main):001:0> %r(<([a-z]+)>(.*?)</\1>) =~ "<peter>max and moritz</peter>"
=> 0
irb(main):002:0> $1
=> "peter"
irb(main):003:0> $2
=> "max and moritz"
irb(main):004:0> $~.begin(0)
=> 0
irb(main):005:0> $~.end(0)
=> 29
Damit lassen sich dann tatsächlich auch so tolle Konstrukte bauen wie:
(das impliziert halt, dass rubys true/false konzept blöd ist ^^)
Aber weißt du was? Ich finde es deswegen nicht besser. $foobar Variablen sind in Ruby wenigstens durch die Bank "vordefiniert", das heißt auf nicht deklarierte globals zuzugreifen resultiert in nil. Allerdings haben wir soetwas in Python nicht. Und ich sehe auch nur Probleme soetwas einzufügen.
Und mal ehrlich! Wer braucht soetwas?
Wenn man diese zwei Sätze nicht versteht, sollte man die Finger von regulären Ausdrücken lassen.
Dann lass die Finger davon.
Und ich wage zu behaupten, dass nur ein kleiner Teil der Pythonistas re komplett verstanden hat.
Hast du es? Ich bezweilfe es. Und du wirst Recht haben. Die Anzahl der Personen die jeden Kniff der sre Bibliothek kennen wird verdammt klein sein. Gerade re.scanner ist mir nur aufgefallen als ich in den Sourcen nachgesehen habe.