[Dresden-pm] Vorkommen eines Elementes in einem String zählen

Steffen Schwigon schwigon at webit.de
Die Aug 9 03:02:47 PDT 2005


Andreas Kunert <akunert at main-rheiner.de> writes:
> Gibts also so eine Art Zähler, wie oft ein Matching getroffen hat?
> $artikel =~ /.*?<$heim_tag.*?>(.*?)<\/$heim_tag.*?>.*?/i zählt ja 
> scheinbar nicht, sondern sagt nur aus, ob ein Treffer da ist und weist 
> das dann $1 zu.

Den non-greedy-Trick hast Du ja schon drin. Halbe Miete.

Du könntest jetzt z.B. ein "substitute" des Ausdruckes in einem
temporären String machen. Beim substitute kommt die Anzahl der
ersetzten Teile zurück.

Ich will mich mal mit Deinen XML-Tags nicht verheddern, ich zähle
hier einfach mal die Paare "Affe...Loewe":

  my $str = "Affe Loewe bla Affe bli Loewe killer Affe blu Loewe";
  my  $count = ($str =~ s/Affe.*?Loewe/Zomtec/ig);
  print $count,"\n";

Kommt 3 raus.
Wichtig ist das "/g" hinten dran, für "global" ersetzen.

Und Du kannst die Klammern um den "=~"-Ausdruck auch
weglassen, hab' ich nur für die Erkennbarkeit gelassen.

GreetinX
Steffen 
-- 
Steffen Schwigon <schwigon at webit.de>
Dresden Perl Mongers <http://dresden-pm.org/>