Thread Array of Hashes aus Datei anlegen (53 answers)
Opened by Flips87 at 2020-02-04 11:19

Raubtier
 2020-02-05 16:30
#191314 #191314
User since
2012-05-04
1075 articles
BenutzerIn
[default_avatar]
2020-02-05T14:57:19 haj
Die POSIX-Klasse [:alpha:] unterscheidet sich von Perls \w dadurch, dass der Unterstrich '_'nicht drin ist. Im normalen Sprachgebrauch gehört der Unterstrich zu den Sonderzeichen, und die ursprüngliche Lösung von Flips87 behandelt ihn auch so. Andererseits erwischt \w auch Buchstaben wie das "ö", das durchaus Bestandteil von Wörtern sein kann, aber es ist eben nicht in [:alpha:] enthalten. Ein s/[^[:alpha:]]/ /g; macht aus 'Wörtern' dann 'W rtern'.


Sorry, ich verstehe dich nicht. Im Ursprungspost wurden \W, \d und _ entfernt. Genau die gleiche Behandlung also, was den Unterstrich angeht.
Und mit den Umlauten: [:alpha:] erfasst sehr wohl Umlaute, wenn der Text decodiert vorliegt. Mein Programm funktioniert so, wie es da steht und behandelt deutsche Umlaute korrekt.

Code: (dl )
1
2
$ echo hallöle | perl -nE 'BEGIN{binmode STDIN, ":utf8"} say "ok" if /hall[[:alpha:]]le/' 
ok

Deine Behauptung ist also widerlegt.

Quote
Das \w erfasst auch Zahlen. In der Original-Regex werden aus "3,1415" zwei Wörter "3" und "1415". Das kann Flips87 vermutlich beantworten, ob das so sein soll, wahrscheinlich ist es einfach unwichtig.


Nein, Zahlen wurden entfernt bzw. sollten entfernt werden. Siehe Funktion reg_exe.

Du hast aber einen Punkt: man kann die Funktion den splitLineIntoWords komplett entfernen und die Loop über die Wörter so machen:
Code (perl): (dl )
for my $word ($line =~ m/([[:alpha:]]+)/g) {

View full thread Array of Hashes aus Datei anlegen