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");