Das Finden der letzte (ganz rechts) passend für einen beliebigen regulären Ausdruck in Ruby

StackOverflow https://stackoverflow.com/questions/814213

  •  03-07-2019
  •  | 
  •  

Frage

Ich arbeite an einem Texteditor in Ruby, und ich brauche eine „Suche“ -Funktion mit vom Benutzer bereitgestellten regulären Ausdruck Mustern zu unterstützen. Hier ist ein einfacher (familiar) Anwendungsfall:

  

Joe Nutzer ist eine Textdatei, und hat den Cursor irgendwo in der Mitte der Datei positioniert. Er will, dass zurück von der aktuellen Cursorposition für die nächsten Teilzeichen sucht einen beliebigen regulären Ausdruck entsprechen.

Ich denke, dass dieses Problem beläuft sich die Benutzermuster auf die gesamte Zeichenfolge vor dem Cursor-Position in der Datei der Anwendung. Sicher, ich könnte eine Schleife durch alle Spiele von Anfang an der Datei und verwenden Sie das letzte Spiel, aber dies scheint schmerzlich ineffizient ... Es wäre besser, suchen „nach links rechts,“ aber ich habe nicht einen Weg gefunden zu tun dies mit Rubin Regexp. Können Sie helfen?

War es hilfreich?

Lösung

Mit der rindex Methode auf Zeichenfolge. Wie folgt aus:

>> 'ssBssBss'.rindex(/B/)
=> 5

Andere Tipps

für .*(foo) sucht, sollte auch die äußerst recht foo finden, dank der gierigen Natur * (aber rindex kann schneller - braucht ein-Micro zu überprüfen)..

Ich denke, rindex ist der Weg zu gehen. Es scheint, wie rindex tatsächlich rückwärts durch die Zeichenfolge durchlaufen. Check out Linie 957 von string.c

Es sieht aus wie jemand einen Weg gefunden, um zu zu umkehren Ausdrücke in PERL im Jahr 2001. Sie würde also einen String umkehren und einen regulären Ausdruck umkehren ... dann die nach rechts Methode links.

Ich bin sicher, dass jetzt viel des Guten ist, und Sie können mit rindex gehen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top