Thread Regexes: Geschwindigkeitsoptimierung
(13 answers)
Opened by GoodFella at 2007-04-06 19:31 Code (perl): (dl
)
$ba_data{'vorname'} =~ /^\s*(.*?)[ ]+($search_pattern{'titel'})\s*$search_pattern{'name_vorsatz'}$/sio wenn du den Letzten Ausdruck nicht klammerst kann er auch nicht gefunden werden. Allso Code (perl): (dl
)
$ba_data{'vorname'} =~ /^\s*(.*?) +($search_pattern{'titel'})\s*($search_pattern{'name_vorsatz'})$/sio Das klammern von einem einzelnen zeichen ist nicht nötig, statt "[ ]" reicht " ". Da hier nicht mit "g" allso global gesucht wird, macht die Option "o" nichts schadet aber auch nicht. Ich hätte fdas etwas anders geschrieben. Das lesen aus seienm String ist etwas schneller als das lesen aus einem Hash. Es ist, meiner Meinung nach (ohne es getestet zu haben), günstiger weniger Regexp zu verwenden. Kurze Variablennamen machen das ganze etwas besser lesbar. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 # Im VORNAMEN suchen: my $vorname=$ba_data{'vorname'}; my $s_ttl=$search_pattern{'titel'}; my $s_vor=$search_pattern{'name_vorsatz'}; my $s_sec=$search_pattern{'titel_secondary'}; if (($ba_config{'search_prename'} == 1) and ($ba_config{'vorname_col'} <= $#top_headlines)) # zus.: Wenn Vorname und Nachname NICHT zusammen { #Titel + Vorname: if ($vorname =~ /^\s*($s_ttl)\s*(.*?)(?: +($s_vor))?\s*$/sio) { ($ba_data{'titel'}, $ba_data{'vorname'}) = ($1, $2); # + Namensvorsatz if($3 ne '') { $ba_data{'name_vorsatz'}=$3; push(@ba_info, 'Titel und Namensvorsatz im Vornamen'); } else { push(@ba_info, 'Titel im Vornamen'); } } #Sekundärtitel + Vorname: elsif ($vorname =~ /^\s*($s_sec)\s*(.*?)(?: +($s_vor))\s*$/sio) { ($ba_data{'titel_secondary'}, $ba_data{'vorname'}) = ($1, $2); # + Namensvorsatz if($3 ne '') { $ba_data{'name_vorsatz'}=$3; push(@ba_info, 'Sekundärtitel und Namensvorsatz im Vornamen'); } else { push(@ba_info, 'Sekundärtitel im Vornamen'); } } #Vorname + Titel + Namensvorsatz: elsif ($vorname =~ /^\s*(.*?) +($s_ttl)\s*($s_vor)$/sio) { ($ba_data{'vorname'}, $ba_data{'titel'}, $ba_data{'name_vorsatz'}) = ($1, $2, $3); push(@ba_info, 'Namensvorsatz und Titel im Vornamen'); } } |