#!/usr/bin/perl use strict; use warnings; # Prototyp Definition # nur Damit der Code schön ist :-) sub split_text($$); # zu parsender Text my $text="das ist ein Text"; # Parser starten und Ergebnis lesen my @liste=split_text('',$text); # Ergebnis ausgeben print join("|",@liste)."\n"; ######################################################################## ######################################################################## # Rekursive Funktion. sub split_text($$) { # Element das geprüft wurde my $last=shift; # zu prüfender Text my $text=shift; # Es können auch weitere Werte übergeben werden, # wie die verschachtelungstiefe oder Eigenschaften, # aus dem Vorherigen Elemnt, # welches das parsen des Nächsten beeinflusst. # liste mit den gefundenden Elementen my @elements=(); # ist Noch Text zu Parsen? if(length($text)>0) { # Das Zerlegen zusammen mit dem Prüfen ist eine "Regel" # Hier haben wir nur eine, die auch nicht komplex ist # Hier würde das "Top-Bottom" Greifen. # Mit einer Möglichst allgemeinen Regel würde Ein großer Teil "heraus gemommen" # und an weitere Regeln weiter geleitet, # die daraus dann die Gewünschten Informationen holen # Ein spezifischen Teil aus dem zu parsenden Text herausschneiden # Hier ist es ein Zeichen, es kann aber auch mehr sein # Das ganze kann auch eine komplexe Funktion sein my $char=substr($text,0,1,''); # Den gewonnenen Teil auf bestimmte Eigenschaften untersuchen # Hier testen ob es eine Leerzeichen und damit ein "Worttrenner" ist if($char eq ' ') { # Den geparsten Teil Der Liste der gefunden Elemente hinzufügen push(@elements,$last); # Aufräumen # Hier "$last" leeren Damit das Nächte wort darin abgelegt werden kann $last=''; } # Wenn das Zeichen noch zu dem Wort gehört, # an Das bisherige Wort anhängen else { $last.=$char; } # Sich selber mit den veränderten Parametern aufrufen # und das Ergebnis der liste der Gefunden Elemente hinzufügen push(@elements,split_text($last,$text)); } # Es ist nichts mehr zu parsen # ist noch ein geparstes Element vorhanden, # das in Die Liste aufgenommen werden muss? elsif(length($last)) { push(@elements,$last); } # Ergebnis zurückliefern return @elements; }