Muster verfahrensbeschreibung ersetzendes scannen

Die Unterstützung der libpcre Quantifiersemantik bei der genauen Meldung von Streaming-Matches zum Zeitpunkt ihres Auftretens ist unmöglich. Betrachten Sie beispielsweise das obige Muster /foo.*bar/, im Streaming-Modus, gegen den folgenden Stream (drei Blöcke, die nacheinander gescannt werden): Zusammenfassung: Eyetracking-Recherchen zeigen, dass es 4 Hauptmuster gibt, die Benutzer verwenden, um Textinformationen auf Webseiten zu scannen: F-Muster, geflecktes Muster, Layer-Cake-Muster und Bindungsmuster. Hamming-Abstand ist die Anzahl der Positionen, durch die sich zwei Gleichlängenstränge unterscheiden. Das heißt, es ist die Anzahl der Ersetzungen, die erforderlich sind, um eine Zeichenfolge in die andere zu konvertieren. Es gibt keine Einfügungen oder Entfernungen, wenn ungefähre Übereinstimmung mit einem Hamming-Abstand. Eine formellere Beschreibung finden Sie auf Wikipedia. Die Bearbeitungsentfernung ist definiert als Levenshtein-Entfernung. Das heißt, es werden drei mögliche Bearbeitungstypen berücksichtigt: Einfügen, Entfernen und Ersetzung. Eine formellere Beschreibung finden Sie auf Wikipedia.

In Situationen, in denen ein Benutzer ein Verhalten benötigt, das vom Vorhandensein oder Fehlen von Übereinstimmungen von Gruppen von Mustern abhängt, bietet Hyperscan Unterstützung für die logische Kombination von Mustern in einem bestimmten Mustersatz mit drei Operatoren: NOT, AND und OR. Derzeit können nicht alle Muster erfolgreich mit dem HS_FLAG_SOM_LEFTMOST-Flag kompiliert werden, das die Unterstützung pro Muster für Den Anfang der Übereinstimmung ermöglicht. Die Muster, die dieses Flag unterstützen, sind eine Teilmenge von Mustern, die erfolgreich mit Hyperscan kompiliert werden können. Insbesondere können viele eingegrenzte Wiederholungsformulare, die mit Hyperscan kompiliert werden können, ohne dass das Start of Match-Flag aktiviert ist, nicht mit aktiviertem Flag kompiliert werden. Um einen logischen Kombinationsausdruck zu verwenden, muss er zusammen mit dem HS_FLAG_COMBINATION-Flag an eine der Hyperscan-Kompilierungsfunktionen (hs_compile_multi(), hs_compile_ext_multi()) übergeben werden, die das Muster als logischen Kombinationsausdruck identifiziert. Die Muster, auf die im logischen Kombinationsausdruck verwiesen wird, müssen zusammen in demselben Muster kompiliert werden, der wie der Kombinationsausdruck festgelegt ist. Wenn das gleiche Muster /foobar/ eine hamming_distance von 2 erhält, erzeugt es Übereinstimmungen, wenn es gegen foobar, boofar, f00bar und alles andere mit höchstens zwei Zeichen gescannt wird, die vom ursprünglichen Muster ersetzt werden. Weitere Informationen finden Sie im Abschnitt Ungefährer Übereinstimmung. Um einige Befehlssatzfeatures verwenden zu können, muss Hyperscan jedoch eine spezielle Datenbank erstellen, um sie zu unterstützen.

Dies bedeutet, dass die Zielplattform zur Musterkompilierungszeit angegeben werden muss. Für Untermuster mit einer Breite mit einem Zeichen, wie z. B. [a] oder . oder x werden fast alle Wiederholungszahlen unterstützt, es sei denn, Wiederholungen sind extrem groß (maximale Grenze größer als 32767). Stream-Zustände können für große, begrenzte Wiederholungen sehr groß sein, z.B. a.{2000}b. Beachten Sie: Solche Untermuster können erheblich billiger sein, wenn am Anfang oder Ende von Mustern und vor allem, wenn die HS_FLAG_SINGLEMATCH-Flag für dieses Muster eingeschaltet ist. Da die .*-Wiederholung im Muster eine gierige Wiederholung in libpcre ist, muss sie so weit wie möglich übereinstimmen, ohne dass der Rest des Musters fehlschlägt. Im Streaming-Modus würde dies jedoch Kenntnisse der Daten im Stream erfordern, die über den aktuellen Block hinausgehen, der gescannt wird.

Für diesen Artikel betrachte ich die zu scannende Geometrie als bestimmenden Faktor des Prozesses und unterbrege sie in zwei verschiedene Geometrietypen: Das traditionelle Muster (das wir das ausgerichtete Layout nennen) zeigt Zeilen untereinander an, wobei alle Bilder auf einer Seite des Layouts und der gesamte Text auf der gegenüberliegenden Seite angezeigt werden. Eine neuere und immer häufigere Alternative zum ausgerichteten Muster ist das Zickzack-Layout, das die Platzierung von Bild und Text in jeder horizontalen Zeile abwechselt. Die jüngste Popularität des Zickzack-Layouts ist wahrscheinlich auf die Tatsache zurückzuführen, dass es monoton eisern bricht und einer langen Seite visuelles Interesse hinzufügt. Bounded-Repeat-Quantifizierer mit großen Wiederholungszahlen beliebiger Ausdrücke (z. B. ([a-z]|bc*d|xy?z)` 1000,5000`) führen zur Musterkompilierungszeit zu einem “Pattern too large”-Fehler.