Tom: strpos(RegEx)

Beitrag lesen

Hello,

Irgendwie kommt mir meine Frage doof vor, aber ich finde einfach nicht die PHP-Funktion die ich brauche:

Ich will in einem String von bis zu 5Mio Zeichen (Messreihen) das erste Vorkommen einer Zeitmessung des Formats hh.mm.ss.ttt finden. Meine RegEx dazu muss glaube ich $Regex="/[0-9]{2}.[0-9]{2}.[0-9]{2}.[0-9]{3}/"; heißen.

Aber mit welcher Funktion rufe ich sie auf?

strpos() macht keine RegEx
preg_mach()und ereg() suchen nicht die Position, sondern OB die RegEx vorkommt,

http://de.php.net/manual/de/function.preg-match.php
siehe Optionsschalter mit  PREG_OFFSET_CAPTURE

Preg_match_all() benutze ich immer, um aus Webseiten HMTL-Mails mit embedded Pictures zu machen.
daher weiß ich, dass das das richtige für Dich wäre  ... :-)

Aber es gibt eine Beschränkung der P-Reg-Funktionen, was die Größe des zu durchsuchenden Blockes betrifft. Ich habe zwar vergessen, wo die lag, bin mir aber ziemlich sicher, dass Du bei 5MByte da in der Problemzone bist.

bzw. basteln mir unnötigerweise Arrays und das Schlimmste: sie arbeiten den ganzen haystack ab (das dauert!!!) was völlig sinnlos ist, da das erste Vorkommen regelmäßig sehr früh ist.

Du suchst mal nach den Limitationen von preg_match und preg_match_all.
Wenn ich mich da geeirt habe, nutzt Du sie so, wie sie sind. Fertig!

Wenn bicht, dann zerschneidest Du die zu durchsuchende Menge _überlappend_ in einzelne Blöcke. Die Überlappung muss mindestens so lang sein, wie das gesuchte Pattern.

Also duchsuchen Block 1 von 0 bis 52.000 Bytes
                Block 2 von 50.000 bis 102.000 Bytes
                Block 3 von 100.000 bis 152.000 Bytes
                usw.

Die Grenzen natürlich nur als Beispiel.

Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)