phpbar.de logo

Mailinglisten-Archive

[php] Re: Zeile 'zerteilen'

[php] Re: Zeile 'zerteilen'

Martin Ramsch m.ramsch_(at)_computer.org
Sun, 15 Aug 1999 23:00:56 +0200


Norbert Pfeiffer schrieb am Sonntag, den 15. August 1999:
> >> Und wenn man den noch ein kleines bissel abwandelt:
> >> eregi("(.*) <a href=\"(.*)\" target=\"(.*)\">(.*)</a><br>",$zeile,$regs);
> >> bekommt man auch noch das Target extra aufgelistet...
[...]
> umstaendlicher Code kann also schneller sein, als etwas elegantes
> (???).
> Das will mir nicht so recht in den Kopf...

Klaro, Eleganz hat ja nichts direkt mit Geschwindigkeit zu tun (sie
Dir mal Frauen an, die auf Stöckelschuhen elegant gehen ... :-).

Aber im Ernst:

Letztendlich müßte man sich halt genau ansehen, was intern passiert
und wo der geringste Aufwand getrieben wird ...

Der Grund dafür, daß der reguläre Ausdruck
  "(.*) <a href=\"(.*)\" target=\"(.*)\">(.*)</a><br>"
nur relativ langsam abgearbeitet werden kann, dürfte darin liegen,
daß so oft .* vorkommt.  Das paßt dann jedesmal auf alles bis zum Ende
vom String; erst dann merkt PHP, daß der Rest vom Muster nicht mehr
paßt und muß wieder einen Schritt zurück und nach der passenden Stelle
suchen, wo es mit dem Rest vom Muster weitermachen kann.

Folgendes (ungetestet) müßte etwas schneller sein:
  '([^ ]*) <a href="([^"]*)" target="([^"]*)">([^<]*)</a><br>'

Vermutlich aber immer noch langsamer als Deine Lösung.

Ich würde bei der Softwareentwirklung aber dennoch der eleganten
Lösung zuerst immer den Vorrang geben, weil die Verständlichkeit und
Wartbarkeit des Codes ganz wichtige Punkte sind.  Wenn nötig, kann man
an der Geschwindigkeit immer noch basteln ...

Ciao,
  Martin
-- 
Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://ramsch.home.pages.de/ >
PGP: 0xE8EF4F75, 52 44 5E F3 B0 B1 38 26  E4 EC 80 58 7B 31 3A D7


php::bar PHP Wiki   -   Listenarchive