Ich arbeite an einer ziemlich spezialisierten Suchmaschinenimplementierung in Perl, es sucht (nach Regex) nach Dokumenten, die spezifisch abgegrenzt sind (eine Teilmenge von: punct :) Zeichenketten aus einer Textdatei. Ich mache die üblichen Suchmaschinen-Indexierungstricks, aber es gibt ein Problem.
Einige der Suchregexmuster enthalten notwendigerweise Trennzeichen, die in der Datei verwendet werden. "Ok, denke ich mir," Wort Nähe, dann ... einfach "... und diese Seite der Gleichung ist geradlinig genug.
Weil die Suchmuster reguläre Ausdrücke sind, habe ich nicht so einfach die spezifischen Wörter bestimmt, nach denen ich in den indizierten Daten suchen soll (denken Sie an "Split", wenn wir über gewöhnliche Strings sprechen).
Triviales Beispiel, "Square [\ s -] * dance" würde direkt auf "Squaredance" passen, aber ein Proximity-Match auf "Square Dance" und "Square Dance" (da '-' ein Delimiter ist). Ich muss wissen, basierend auf der Regex, nach "Quadrat" und "Tanz" getrennt suchen, aber in der Nähe voneinander.
Ich bin ein Spiel für die Herausforderung, aber ich würde lieber etablierten Code verwenden. Mein Bauchgefühl sagt mir, dass es ein interner Haken für die Regex-Engine sein wird, aber ich weiß nichts davon. Irgendwelche Vorschläge?
Das re
Pragma kann die Informationen erzeugen, an denen Sie interessiert zu sein scheinen.
Ausgabe:
%Vor%Leider scheint es keinen programmatischen Haken zu geben, um diese Information zu erhalten. Sie müssten die Ausgabe von STDERR abfangen und analysieren. Grober Proof-of-Concept:
%Vor%Benutze es so:
%Vor% $re
enthält das Muster, @atoms
enthält eine Liste der literalen Teile des Musters. In diesem Fall ist das
Tags und Links regex perl search-engine