Thread Regexes: Geschwindigkeitsoptimierung (13 answers)
Opened by GoodFella at 2007-04-06 19:31

topeg
 2007-04-07 13:15
#75726 #75726
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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');
             }
            }

View full thread Regexes: Geschwindigkeitsoptimierung