Vor Kurzem stand ich vor dem Problem, daß ich einen Text zerlegen wollte, und zwar so, daß alle einzelnen Wörter in einem Array landen. Oder genauer
Mache aus:
Dies ist ein Testtäxt!a!b!c! aäöü ß
Ä Ö Ü Ä!Ö!Ü!
123456 1 2 3 4 5 6 !§%&
Sonderzeichen
raus!
ein Array mit den einzelnen Wörtern bzw. einzelnen Buchstaben und Zahlen.
Als kleine Schwierigkeit trat das Problem auf, daß Satzzeichen und Buchstaben oder Zahlen auch ohne Leerzeichen dazwischen auftraten.
Also fiel mir folgende Lösung ein:
my $s=qq~Dies ist ein Testtäxt!a!b!c! aäöü ß
Ä Ö Ü Ä!Ö!Ü!
123456 1 2 3 4 5 6 !§%&
Sonderzeichen
raus!~;
Was passiert hier?
Also, da wie gesagt alle Sonderzeichen ausgefiltert werden sollen, wird durch das $s=~ tr... eben jedes Sonderzeichen inklusive des Zeilenumbruches, Tabulatorzeichens und \r-Zeichens durch ein Leerzeichen ersetzt.
Danach wird ein split mit einem Leerzeichen durchgeführt und voila: Das war's schon! In @array stehen brav alle Wörter und Zahlen.
Übrigens: Warum habe ich nicht \W genommen
in der Zeile mit dem $s=~ tr... ? Ganz einfach: Weil dann auch die Umlaute äöüÄÖÜß als Satztrenner hergenommen worden wären, was ja nicht zulässig ist.
Kommentare zum Beitrag "Praxisbeispiel: Wörter extrahieren aus Text"
Kommentar von Stefan B.
Alternativ kann man auch mit Locales arbeiten:
use POSIX;
use locale;
setlocale(LC_CTYPE, "de_DE.ISO-8859-1");
Von:Alex2983 Kommentar: Super. Wenn alle so eine Beschreibung abliefern würden, wäre es ein Traum. Besten Dank Zum Beitrag
Von:Daniel Kommentar: Super Tipp, habe sie jetzt auch gefunden, nur bei mir ist es leider eine 16-stellige Nummer...Was mache ich denn jetzt damit?? Zum Beitrag
Von:Mothman Kommentar: Im obigen Kommentar sollten in der Zeile