Recherche de la dernière correspondance (la plus à droite) d'une expression régulière arbitraire en ruby

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

  •  03-07-2019
  •  | 
  •  

Question

Je travaille sur un éditeur de texte en ruby ??et je dois prendre en charge l'option "Rechercher". fonctionnalité avec des modèles d'expression régulière fournis par l'utilisateur. Voici un cas d'utilisation simple (familier):

  

Joe L'utilisateur édite un fichier texte et a positionné le curseur quelque part au milieu du fichier. Il souhaite rechercher en arrière à partir de l'emplacement actuel du curseur la sous-chaîne la plus proche correspondant à une expression régulière arbitraire.

Je pense que ce problème revient à appliquer le motif de l'utilisateur à la chaîne entière précédant l'emplacement du curseur dans le fichier. Bien sûr, je pourrais parcourir toutes les correspondances depuis le début du fichier et utiliser la dernière correspondance, mais cela semble douloureusement inefficace ... Il serait préférable de rechercher "de droite à gauche". mais je n'ai pas trouvé le moyen de le faire avec ruby ??Regexp. Pouvez-vous aider?

Était-ce utile?

La solution

Utilisez la méthode rindex sur votre chaîne. Comme ceci:

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

Autres conseils

la recherche de . * (foo) devrait également localiser le foo le plus à droite, grâce à la nature gourmande de. * (mais le rindex peut être plus rapide - nécessite un micro-repère pour vérifier!).

Je pense que le rindex est la voie à suivre. Il semble que le rindex va réellement parcourir la chaîne à l'envers. Consultez la ligne 957 de string.c

Il semblerait que quelqu'un ait trouvé un moyen de inverser les règles expressions dans PERL en 2001. Donc, vous inverseriez une chaîne et une expression rationnelle ... puis utilisiez la méthode de gauche à droite.

Je suis sûr que c'est exagéré maintenant et que vous pouvez utiliser le rindex

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top