die manuellen Zustände PHP folgendes über die „S“ des PCRE (Extra-Analyse der Muster) Modifikator auf http://php.net/manual/en/reference.pcre.pattern.modifiers.phpPCRE PHP Konkretes Beispiel für die Verwendung und den Nutzen des Modifikators "S" (Extra-Analyse des Musters)?
S
Wenn ein Muster mehrmals werden wird verwendet, ist es Ausgaben wert mehr Zeit, es zu analysieren, um die Zeit für das Zusammenbringen zu beschleunigen. Wenn dieser Modifikator gesetzt ist, wird diese zusätzliche Analyse durchgeführt. Derzeit ist das Studieren eines Musters nur für nicht verankerte Muster nützlich, die kein einziges festes Anfangszeichen haben.
So ist seine Verwendung auf Muster verwendet, die mehrmals verwendet werden soll, ohne Anker in sie (wie ^
, $
) oder einer festen Start char Sequenz, z.B. in einem Muster wie '/^abc/'
.
Aber es gibt keine spezifischen Details darüber, wo z.B. Wenden Sie diesen Modifikator an und wie es tatsächlich funktioniert.
Gilt es nur für den PHP-Thread des aktuell ausgeführten Skripts und nachdem das Skript ausgeführt wurde, ist die "Cache" -Analyse des Musters verloren gegangen? Oder speichert die Engine die Analyse des Musters in einem globalen Cache, der dann mehreren PHP-Threads zur Verfügung gestellt wird, die PCRE mit dem mit diesem Modifikator markierten Muster verwenden?
Auch von der Einführung PCRE: http://php.net/manual/en/intro.pcre.php
Hinweis: Diese Erweiterung eine globale Pro-Thread unterhält Cache von kompilierten regulären Ausdrücken (bis 4096)
Wenn die "S" Der Modifikator wird nur pro Thread verwendet. Wie unterscheidet er sich vom PCRE-Cache kompilierter Regexps? Ich vermute, dass zusätzliche Informationen gespeichert werden, so wie MySQL es tut, wenn es die Zeilen in einer Tabelle indiziert (im Falle von PCRE wird diese zusätzliche Information natürlich im Speicher gespeichert).
Zuletzt, aber nicht zuletzt, hat jemand einen echten Anwendungsfall erlebt, in dem er/sie diesen Modifikator verwendet hat und haben Sie eine Verbesserung bemerkt und schätzen seine Vorteile?
Danke für die Aufmerksamkeit.
Ich kenne nicht die Implementierungsdetails von PHP Verwendung von PCRE, aber in PCRE v10 wird immer studiert. Und PCRE selbst hat keinen Cache kompilierter Regexe. Beim Studieren wird überprüft, ob für ein bestimmtes Muster einige Optimierungen möglich sind. –
Vielen Dank für Ihren Kommentar, wie auch immer, Sie sagen, dass der Lernmechanismus so etwas wie "Analysieren der Regexp-Struktur und Neuschreiben in einem performanteren Muster" macht, ist es richtig? – tonix
Nicht genau. Ich zitiere die Dokumente: * Studieren eines Musters macht zwei Dinge: erstens, eine untere Grenze für die Länge der Betreff-Zeichenfolge, die benötigt wird, um das Muster zu entsprechen, ist berechnet. [...] Das Studieren eines Musters ist auch nützlich für nicht verankerte Muster, die kein einziges festes Anfangszeichen haben. Eine Bitmap von möglichen Startbytes wird erstellt. Dies beschleunigt das Finden einer Position in dem Subjekt, bei dem der Abgleich beginnen soll. * –