Ich versuche, ein Skript für die Fuzzy-Suche in einem Puffer zu erstellen. Die Hauptidee ist eine Eingabe zu nehmen, und fügen Sie .\{-}
zwischen jedem Paar von Zeichen, zB foo
wird f.\{-}o.\{-}o
.
Dies funktioniert ziemlich gut, führt jedoch zu vielen nicht idealen Übereinstimmungen. Ich denke, eine Fuzzy-Suche sollte zuerst die kürzesten Übereinstimmungen ergeben. Betrachten Sie das folgende Beispiel:
public void put()
Wenn Sie eine Fuzzy-Suche nach put
(so, p.\{-}u.\{-}t
) durchführen, stimmt dies mit der gesamten Zeichenfolge überein public void put
, aber die kürzere put
innerhalb dieser Übereinstimmung wäre nützlicher.
Die nicht-gierigen Betreiber sind gut bei den Spielen , dass die Suche nach Ende früher, aber ich brauche etwas, das, zur gleichen Zeit, Streichhölzer , die es vorziehen , beginnen später. Konzeptionell sollte es in beide Richtungen nicht gierig sein. Ist das möglich?
quelle
Antworten:
Es gibt nicht genug Beispiele, aber ich denke, das macht, was Sie wollen.
würde
put
in Ihrem Beispiel statt passenpublic void put
. Grundsätzlich.*
zwingt das die Regex-Engine, die Zeichenfolge rückwärts zu durchsuchen, da.*
die gesamte Zeichenfolge zuerst verbraucht und dann zurückverfolgt wird, um die neueste Übereinstimmung von zu findenp.\{-}u.\{-}t
quelle
pouty puppet
, die zwei Übereinstimmungen ergibt.